3

我只是在看我用 C 编写的一个简单 exe 的 .text 部分,我只是想弄清楚一些 x86 操作码的结构。

从我一直在阅读的内容来看,似乎 0xe9 是用于相对跳转(JMP)的单字节操作码,但是我不确定其余字节实际上是如何形成跳转地址的。

我正在使用超级在线反汇编程序ODA来反汇编我的程序,这是显示的内容:

.text:0x00411005    e936210000  jmp    0x00413140

所以 0xe9 是 JMP 指令,因为这是一个 32 位可执行文件,我假设接下来的四个字节将是跳转的地址,但是我有点不确定它们的实际结构。

如果有人可以帮助他了解一下,我将不胜感激。

谢谢

4

1 回答 1

14

这是一个相对跳转,这意味着目标是相对于下一条指令给出的。

该指令位于地址 0x411005 并占用 5 个字节,因此下一条指令位于地址 0x41100a。跳转的相对量(编码为little-endian,即字节从最低有效到最高存储)是0x2136。所以跳转的目的地是0x41100a + 0x2136 = 0x413140。

于 2013-09-12T11:07:27.420 回答