通常,可以使用GCC和Clang中的
假设我使用
编译的结果是一堆
但如果我想从这个过程中获得汇编输出呢?也就是说,在将IR编译为汇编语言期间,经过链接时优化之后,但在实际汇编和链接到最终可执行文件之前的汇编源代码。 我尝试在链接步骤中简单地添加
-S
标志从源文件获取GCC的优化汇编输出,如下面的示例所示。gcc -O3 -S -c -o foo.s foo.c
假设我使用
-O3 -flto
编译所有源文件,以启用链接时全程序优化,并想查看函数的最终编译器生成的优化汇编代码,以及查看代码如何被内联。编译的结果是一堆
.o
文件,它们实际上是伪装成对象文件的IR文件。在链接可执行文件或共享库时,它们被压缩在一起,作为一个整体进行优化,然后编译成目标二进制文件。但如果我想从这个过程中获得汇编输出呢?也就是说,在将IR编译为汇编语言期间,经过链接时优化之后,但在实际汇编和链接到最终可执行文件之前的汇编源代码。 我尝试在链接步骤中简单地添加
-S
标志,但那并没有真正起作用。
我知道可以对可执行文件进行反汇编,甚至与源代码交错,但有时查看实际由编译器生成的汇编代码会更好,特别是使用-fverbose-asm
。
-g
选项,每个函数都有标签,并且块 -> 源代码行号调试信息允许objdump -drwC -S -l
将反汇编与源代码交错。值得一试,不知道是否有效。虽然没有gcc -S -fverbose-asm
那样的命名输出好看。 - Peter Cordes