x86 JMP操作码结构

Ton*_*ony 2 c x86 assembly intel

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

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

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

.text:0x00411005    e936210000  jmp    0x00413140
Run Code Online (Sandbox Code Playgroud)

因此0xe9是JMP指令,因为这是一个32位可执行文件,我假设接下来的四个字节将成为跳转的地址,但是我不确定它们是如何实际构造的.

如果有人能帮助他发光,我会很感激.

谢谢

int*_*jay 11

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

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