怎么才能做到这一点呢?

如果我想分析某些东西是如何编译的,我将如何获得发出的汇编代码?

推荐答案

对GCC(或g++)使用-S选项.

gcc -S helloworld.c

这将在helloworld上运行预处理器(cpp).c、 执行初始编译,然后在汇编程序运行之前停止.

默认情况下,这将输出一个文件helloworld.s.仍然可以使用-o选项设置输出文件.

gcc -S -o my_asm_output.s helloworld.c

当然,这只有在您有原始来源的情况下才有效. 如果只有结果对象文件,另一种方法是使用objdump,方法是设置--disassemble选项(缩写形式为-d).

objdump -S --disassemble helloworld > helloworld.dump

如果为目标文件启用了调试选项(编译时为-g),并且文件未被剥离,则此选项效果最好.

运行file helloworld将为您提供一些有关使用objdump将获得的细节级别的信息.

C++相关问答推荐

插入元素后,Sizeof操作符无法正常工作

在严格的C89模式下,收件箱不会在' uint64_t '上发出警告

try 使用sigqueue函数将指向 struct 体的指针数据传递到信号处理程序,使用siginfo_t struct 体从一个进程传递到另一个进程

va_copy的使用是未定义的行为吗?

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

堆栈在作用域阻塞后会被释放吗?

在C语言中,在数学运算过程中,为什么浮点数在变量中的行为不同

在CLANG中调试预处理器宏

判断X宏的空性

获取每个循环迭代结束时的当前时间

我的C函数起作用了,但我不确定为什么

搜索使用int代替time_t的用法

Fprintf正在写入多个 struct 成员,并且数据过剩

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

使用正则表达式获取字符串中标记的开始和结束

在Ubuntu上使用库部署C程序的最佳实践

通过char*访问指针的对象表示是未定义的行为吗?

模仿 memmove 的行为

为什么<到达*时不会转换为>?

GnuCobol 使用 double 类型的参数调用 C 函数