反汇编程序生成的反汇编清单与编译器在编译C代码期间可选生成的程序集代码清单完全相同吗?
发布于 2017-02-19 03:11:33
不,我认为编译器的程序集输出可以包括符号名、函数和变量,甚至包括struct成员名。反汇编将只包含数字。
换句话说,编译器和反汇编程序都可以输出操作码指令名,但是反汇编程序在引用内存地址时只输出数字而不是符号。或者,如果要反汇编DLL,反汇编程序可能会输出从DLL导出的公共符号;但是(与编译器不同)不是内部变量和子例程的符号名称。
除此之外,这是相同的机器代码。还有一个链接器,它发生在编译器之后(链接器的处理在反汇编程序显示的数字地址中很明显)。
发布于 2017-02-19 08:12:20
这取决于编译器,而且通常情况不一样(例如,编译器生成许多丢失的本地标签)。
如果使用GCC编译foo.c源代码(从技术上讲是翻译单位),我建议使用
gcc -Wall -O -fverbose-asm -S foo.c它生成汇编程序代码foo.s,您可以使用某些编辑器查看该代码。感谢-fverbose-asm,汇编程序文件还包含有用的生成注释(以帮助您理解正在发生的事情)。
https://softwareengineering.stackexchange.com/questions/342525
复制相似问题