我正在为 32 位 x86 指令集开发反汇编程序。我的代码目前可以正确解码大多数 1 字节和 2 字节操作码,但我遇到了问题。当我将代码的输出与 Objdump 进行比较时,我发现 Objdump 看到以下内容:-
89 14 98 mov %edx,(%eax,%ebx,4)
8b 45 d8 mov -0x28(%ebp),%eax
另一方面,我的代码给出: -
89 14 98 8B 45 D8 89 MOV.
根据我对 Intels 文档的理解(特别是 Modrm 和 Sib 寻址表格),该字节流应解释为:-
89 - The opcode
14 - The Modrm byte
98 - The Sib byte specified by the Modrm byte (as shown in Intels Modrm addressing table)
8B 45 D8 89 - The four byte displacement specified by the Sib byte (as shown in Intels Sib addressing table).
Objdump 说没有位移字节,但我的代码和英特尔文档似乎(至少对我来说)都不是这样说的。
如果有人能指出我的错误在哪里,将不胜感激。
谢谢。