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