Debugging 理解汇编中的JMP代码
Iv'e最近刚刚触及汇编语言和调试的表面。我有以下代码:Debugging 理解汇编中的JMP代码,debugging,assembly,disassembly,opcode,Debugging,Assembly,Disassembly,Opcode,Iv'e最近刚刚触及汇编语言和调试的表面。我有以下代码: Address Hex dump Command Comments 006E3689 . E8 C5F9FFFF CALL 006E3053 ->006E368E E9 DB E9 ->006E368F 35 DB 35
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是jump的操作码,但Iv'e还没有找到35和80的信息。我假设0000D490是某种偏移量,但我找不到任何数学公式来计算006EB6C8地址
希望这个问题也能被理解,我还是个新手。提前谢谢 我很不解为什么OllyDbg不为您分解跳转。无论如何,
E9
是一个jmp,正如您所了解的。它从下一条指令的开始处获得4字节的偏移量。因此,您的指令实际上是E9 35 80 00 00
,这意味着跳转到下一条指令的地址+0000835
(x86使用小尾端字节顺序)。下一条指令的地址当然是006E3693
,因此跳转会将您带到006E3693+0000835=006EB6C8
,这是您最初编写的内容。我对OllyDbg为什么不为您反汇编该跳转感到困惑。无论如何,E9
是一个jmp,正如您所了解的。它从下一条指令的开始处获得4字节的偏移量。因此,您的指令实际上是E9 35 80 00 00
,这意味着跳转到下一条指令的地址+0000835
(x86使用小尾端字节顺序)。下一条指令的地址当然是006E3693
,因此跳转会将您带到006E3693+0000835=006EB6C8
,这是您最初编写的。您不需要猜测操作码的功能,请下载手册:。是一个有用的网站。有一个很好的反汇编程序,名为udcli
。相关:相关:您不需要猜测操作码的作用,请下载手册:。是一个有用的网站。有一个很好的反汇编程序,名为udcli
。相关:相关: