Debugging 理解汇编中的JMP代码

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

Iv'e最近刚刚触及汇编语言和调试的表面。我有以下代码:

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
。相关:相关: