【问题标题】:x86 JMP opcode structurex86 JMP 操作码结构
【发布时间】:2013-09-12 11:01:07
【问题描述】:

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

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

我正在使用超级在线反汇编程序ODA对我的程序进行反汇编,显示的是这样的:

.text:0x00411005    e936210000  jmp    0x00413140

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

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

谢谢

【问题讨论】:

标签: c assembly x86 intel


【解决方案1】:

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

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

【讨论】:

  • 我在哪里可以找到你所说的关于小端的部分? (我在读完这篇文章后自己相信并确认了这一点,但我需要了解 JNZ,我发现了它,我再次关注小端,但我想知道你在哪里读到的,所以我可以知道其他说明)
  • @DADi590 所有指令及其编码都在Intel architecture manual第2卷中描述。
猜你喜欢
  • 2012-01-02
  • 2014-06-22
  • 2010-10-07
  • 2010-12-05
  • 2019-07-10
  • 1970-01-01
  • 2019-01-20
  • 2018-10-24
  • 2019-03-05
相关资源
最近更新 更多