假设我在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
是什么意思?我在网上找不到任何解释如何阅读这些东西的东西。 最佳答案
400b62
是指令的地址。bf 50 0a 49 00
是构成指令的字节。在这种情况下,400b62
处的指令将寄存器%edi
设置为0x490a50。这里的bf
表示“set edi”,而50 0a 49 00
表示0x490a50的字节,以小尾数顺序排列(就像英特尔处理器那样)。
如果你想读每一条指令,它需要一点解码,但可以做到。在我的经验中,最好的参考是Intel® 64 and IA-32 Architectures Software Developer Manuals,但它们不适合胆小的人。
关于c - 如何解释解散的C代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46738723/