我最近刚刚触及汇编语言和调试的表面。我有以下代码:
Address Hex dump Command Comments
006E3689 . E8 C5F9FFFF CALL 006E3053
->006E368E E9 DB E9
->006E368F 35 DB 35 ; CHAR '5'
->006E3690 80 DB 80
->006E3691 . 0000D490 DD 90D40000
006E3695 /> E8 72040000 CALL 006E3B0C
再往下...
Address Hex dump Command Comments
006EB6C8 /. 6A 58 PUSH 58
006EB6CA |. 68 A0372A00 PUSH 2A37A0
006EB6CF ^ E9 C17FFFFF JMP 006E3695
现在,在我编译 -> 指示的代码之前,实际上都包含在JMP 006EB6C8
当然,它只是跳到第二组代码,推送一些东西,然后返回到顶部。
现在这段代码仍然有效,但我不确定为什么代码在编译时发生了变化(使用 Ollydbg),但更重要的是(我相信)代码如何知道跳转以及跳多远。到目前为止我的研究告诉我E9
是跳转的操作码,但我还没有找到相关信息35
and 80
.
我假设0000D490
是某种偏移量,但我找不到任何数学可以将006EB6C8
地址。
我很困惑为什么 OllyDbg 不为你拆解那个跳转。反正,E9
是一个 jmp 附近,正如你已经弄清楚的那样。它距离下一条指令的起始位置有 4 个字节的偏移量。因此,您的指令实际上是E9 35 80 00 00
意思是jump to address of next instruction + 00008035
(x86 使用小端字节顺序)。下一条指令的地址当然是006E3693
,所以跳跃会带你到006E3693 + 00008035 = 006EB6C8
这是你原来写的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)