我一直在为我的最终项目工作,这是一个 AMD64 指令集的反汇编程序,我试图手动反汇编机器代码以正确理解它。但是我被 x87 指令卡住了。
指令的机器码为: dd 04 c5 60 40 08 08...
我已经检查了 AMD64 手册 vol3,它说 DD 是一条 x87 指令,并且在 ModRM 字节的帮助下,即0b00000100我的 ModRM.reg 字段是,000并且在此信息手册中,该说明的含义是“FLD mem64real”。但是因为我已经为 i386 目标架构编译了这段代码,所以我认为我不应该有 64 位内存地址。
但最有趣的部分是当我用 objdump 检查二进制文件时,它说这个字节对应,fldl 0x8084060(,%eax,8)但我找不到任何关于 FLDL 指令的信息,也找不到 objdump 是如何找到的。
所以我的问题是我做错了什么吗?
objdump 如何认为指令是 FLDL 但手册说它的 FLD ?
二进制的目标机器是 i386。
我使用 AMD64 手册第 3 卷查看说明
objdump 的版本是 GNU objdump (GNU Binutils for Debian) 2.26.1
这是二进制的 readelf 输出
ELF Header
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x80482c0
Start of program headers: 52 (bytes into file)
Start of section headers: 3744 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 8
Size of section headers: 40 (bytes)
Number of section headers: 31
Section header string table index: 28