是否有可能說服GCC發射的中間文件,其中示出了:使用GCC輸出評論&註釋的中間文件
- 評論
- 原始源
- 擴展宏定義應用於由
- 優化編譯器
- 生成的C或C++代碼將被轉換爲彙編代碼?
我寧願看到中間的C/C++而不是彙編程序,但是如果它有足夠的註釋,我也可以使用匯編程序。
我試圖反向工程一個庫,幾乎完全由宏組成,以擴展它。我還想看看優化的效果,以便爲編譯器提供更多機會來進行更多優化。 (換句話說,要查看我以前的嘗試無效)
是否有可能說服GCC發射的中間文件,其中示出了:使用GCC輸出評論&註釋的中間文件
我寧願看到中間的C/C++而不是彙編程序,但是如果它有足夠的註釋,我也可以使用匯編程序。
我試圖反向工程一個庫,幾乎完全由宏組成,以擴展它。我還想看看優化的效果,以便爲編譯器提供更多機會來進行更多優化。 (換句話說,要查看我以前的嘗試無效)
GCC不是直接在C++代碼中應用優化,而是以某種內部語言獨立格式(稱爲GIMPLE)應用優化,但無法輕鬆恢復爲C++代碼。
取決於你想要什麼,你可以
剛剛展開的巨集:g++ -E
還是看的彙編程序輸出在這裏你可以看到其中的C線++代碼映射到一個彙編塊:
g++ -g ... && objdump -S output
我不建議直接從gcc(帶-S)輸出彙編程序,因爲生成的註釋幾乎是useles秒。
1和2顯示在原始來源中。
3您可以通過-E
獲得具有擴展宏定義(實際上已經完全預處理)的源代碼。
4可以通過-da
或各種,-fdump-tree-xxx
和其他-fdump-xxx
選項獲得各個優化階段的中間代碼。
這些都記錄在這裏:
http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Debugging-Options.html#Debugging-Options
5,我不認爲GCC確實源到源轉換,因此所得到的C++代碼是原來的C++代碼。
做哪些GCC不會在這裏描述:
哪些選項是你已經知道的?我想你知道'-E'用於某些半註釋程序集的預處理(因此擴展宏)和'-S -g -fverbose-asm'。我不確定GCC是否可以在優化後發出中間語言代碼,您可能想看看Clang - 它編譯爲LLVM中間語言,它完全指定並可能比x86 asm更容易讀取。 (我不認爲任何編譯器實際上會對C(++)源進行優化,並因此會發出可讀的C(++)優化代碼。) – us2012
@ us2012:我(部分地)知道'-save-temps ',但由於我無法理解的原因,我無法實現它。如在,我找不到結果文件。 –