比方说,我在由ç编译器生成的对象文件运行objdump -d
,我得到这个拆卸:如何解释disassembed C代码
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
是什么意思?我无法在互联网上找到任何解释如何阅读这些内容的内容。
'BF 50 0A 49 00'是机器代码'$ MOV 0x490a50,%edi'。通常,助记符都对齐到一个共同的列,所以这很容易看到。 – fuz
你最好使用[编译器选项创建一个程序集文件](https://stackoverflow.com/questions/137038/how-do-you-get-assembler-output-from-cc-source-in- GCC)。它将用相应的C语句,变量和文字标注汇编代码。 – Barmar