我刚才有一个问题,我似乎找不到合适的答案 .
我给了这个代码:
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 回答
加载
cl
后ecx
中的值为0xabcd1282 .cl
(signed -126 / unsigned 130)小于al
(signed -1 / unsigned 255),无论它是被视为有符号还是无符号 . (在这种情况下,它被视为jl
签名 . )因此不进行跳转 . 既然我们不知道eax
和ecx
的最终值是什么 .跳转的偏移量为0x12(0x3c - 0x2a,目标地址减去下一条指令的地址) .