假设我在 C 编译器生成的目标文件上运行 objdump -d
,我得到了这个反汇编:
0000000000400b5e <main>:
400b5e: 55 push %rbp
400b5f: 48 89 e5 mov %rsp,%rbp
400b62: bf 50 0a 49 00 mov $0x490a50,%edi
400b67: e8 04 0b 00 00 callq 401670 <_IO_puts>
400b6c: 5d pop %rbp
400b6d: c3 retq
400b6e: 66 90 xchg %ax,%ax
我不确定如何解释这里的所有内容。走线:
400b62: bf 50 0a 49 00 mov $0x490a50,%edi
我知道 mov
语句在做什么,但是 400b62
是什么意思? bf 50 0a 49 00
是什么意思?我在 Internet 上找不到任何解释如何阅读这些内容的内容。
最佳答案
400b62
是指令的地址。 bf 50 0a 49 00
是组成指令的字节。在这种情况下,位于 400b62
的指令将寄存器 %edi
设置为 0x490a50。这里 bf
表示“set edi”,50 0a 49 00
是 0x490a50 的小字节序字节(与 Intel 处理器一样)。
如果您希望能够阅读每条指令,则需要进行一些解码,但可以做到。根据我的经验,最好的引用是 Intel® 64 and IA-32 Architectures Software Developer Manuals ,但它们不适合胆小的人。
关于c - 如何解释反汇编的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46738723/