GCC輸出帶C源代碼的匯編文件,一共有兩種方式(同樣也適合G++輸出呆CPP源代碼的匯編文件)。
測試代碼(hello.cpp)
#include<iostream>
usingnamespace std;
intFactorialTail(int n,int sum)
{
if(n <0){return0;}
elseif(n ==0){return1;}
elseif(n ==1){return sum;}
else{returnFactorialTail(n -1, n * sum);}
}
int main()
{
cout <<FactorialTail(5,1)<< endl;
return0;
}
第一種方式:
1、
g++-S hello.cpp
g++ -g -c hello.cpp
生成.s匯編文件和.o文件:

2、第一步中必須要使用第二條命令,第一條命令只是為了顯示.s匯編文件
objdump -S hello.o > hello_objdump.s
生成含有調試信息、CPP源代碼的匯編代碼

第二種方式:
使用GNU C Assembler的列表功能來完成,例如:
g++-c -g -Wa,-adlhn hello.cpp > gnu.s
這個命令的說明如下:
-Wa,option :把選項option傳遞給匯編器.如果option含有逗號,就在逗號處分割成多個選項.也就是Gas,至於Gas的命令參數,可以查看相應的文檔,其中-a[cdghlns]參數的作用是打開列表功能。
這種方式可以顯示足夠的信息,但是命令稍微復雜,參數比較多,不太容易選擇。
Gas的命令行參數概要信息摘錄如下:
1: a: -a[cdghlns] enable listings
2: alternate: --alternate enable alternate macro syntax
3: D: -D for compatibility
4: f: -f to work faster
5: I: -I for .include search path
6: K: -K for difference tables
7: L: -L to retain local symbols
8: listing: --listing-XXX to configure listing output
9: M: -M or --mri to assemble in MRI compatibility mode
10: MD: --MD for dependency tracking
11: o: -o to name the object file
12: R: -R to join data and text sections
13: statistics: --statistics to see statistics about assembly
14: traditional-format: --traditional-format for compatible output
15: v: -v to announce version
16: W: -W, --no-warn, --warn, --fatal-warnings to control warnings
17: Z: -Z to make object file even after errors
生成含有調試信息、CPP源代碼的匯編代碼:
相比而言,還是第一種方式生成的文件更加的直觀明了。
附件列表