首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编代码与反汇编清单的区别

汇编代码与反汇编清单的区别
EN

Software Engineering用户
提问于 2017-02-19 02:10:37
回答 2查看 2.1K关注 0票数 1

反汇编程序生成的反汇编清单与编译器在编译C代码期间可选生成的程序集代码清单完全相同吗?

EN

回答 2

Software Engineering用户

发布于 2017-02-19 03:11:33

不,我认为编译器的程序集输出可以包括符号名、函数和变量,甚至包括struct成员名。反汇编将只包含数字。

换句话说,编译器和反汇编程序都可以输出操作码指令名,但是反汇编程序在引用内存地址时只输出数字而不是符号。或者,如果要反汇编DLL,反汇编程序可能会输出从DLL导出的公共符号;但是(与编译器不同)不是内部变量和子例程的符号名称。

除此之外,这是相同的机器代码。还有一个链接器,它发生在编译器之后(链接器的处理在反汇编程序显示的数字地址中很明显)。

票数 4
EN

Software Engineering用户

发布于 2017-02-19 08:12:20

这取决于编译器,而且通常情况不一样(例如,编译器生成许多丢失的本地标签)。

如果使用GCC编译foo.c源代码(从技术上讲是翻译单位),我建议使用

代码语言:javascript
复制
gcc -Wall -O -fverbose-asm -S foo.c

它生成汇编程序代码foo.s,您可以使用某些编辑器查看该代码。感谢-fverbose-asm,汇编程序文件还包含有用的生成注释(以帮助您理解正在发生的事情)。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/342525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档