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