首页 文章

x86汇编寄存器和mov指令,以及跳转偏移量

提问于
浏览
2

我刚才有一个问题,我似乎找不到合适的答案 .
我给了这个代码:

0020 mov eax, [ebp+0x0c]; value inside = 0x000000ff
0023 mov cl, [ebp+ox08]; value inside- 0x82
0026 cmp al, cl  
0028 jl label             ;label is at address 003c, jl is signed
002a nop
002b
...
003c label:sub al,cl

如果在执行此代码之前 [ebp+0x08] 中的值为0x82且 ecx 为0xabcd1234,则执行此代码后 eax 的值是多少?
它会清除高位,以便 ecx 是0x00000082还是 ecx 是0xabcd1282?

另外,计算 jl 指令偏移量的地址是什么?
那么如何确定 jl 指令的偏移值?

al 的值是不是大于 cl ?所以不会 jl not 跳?

提前致谢

1 回答

  • 3

    加载 clecx 中的值为0xabcd1282 .

    cl (signed -126 / unsigned 130)小于 al (signed -1 / unsigned 255),无论它是被视为有符号还是无符号 . (在这种情况下,它被视为 jl 签名 . )因此不进行跳转 . 既然我们不知道 eaxecx 的最终值是什么 .

    跳转的偏移量为0x12(0x3c - 0x2a,目标地址减去下一条指令的地址) .

相关问题