selph
selph
发布于 2022-01-11 / 337 阅读
0
0

《xchg rax,rax》片段分析0x0a--地址加一

前言

本次是该系列的的第0x0a篇


实验环境:

  • Windows10 + VS2022 + masm

0x0a

代码片段链接:xorpd | xchg rax,rax 0x0a

    add      byte [rdi],1
.loop:
    inc      rdi
    adc      byte [rdi],0
    loop     .loop

代码分析

这里如果rdi是个普通的立即数,那这里会报错,因为byte ptr [rdi]是指针取地址操作,把rdi中的值作为地址进行取值然后操作

若rdi是个地址,则这里会把这个地址里的最低字节进行+1操作,然后进入循环,这个循环似乎什么事情也没有做,就空转,然后就介绍了,这里的功能大概是给制定最低位字节的值+1

测试代码:

.data
selstr db "hello world!",0 

.code
main proc
    xor rax, rax
    lea rdi, qword ptr [selstr]
    lea rcx, [0100h]

    mov      al, byte ptr [rdi] ;0x68
    add      byte ptr [rdi], 1  ;给rdi地址低8位+1
    mov      al, byte ptr [rdi] ;0x69
looppos:
    inc      rdi                ;给rdi地址+1
    adc      byte ptr [rdi], 0  ;若有进位溢出,则再次+1,感觉不会出现这种情况
    loop     looppos

	ret
main ENDP
END

评论