2009-09-25 162 views
1

我想知道是否有一些特殊的方法來編譯高級代碼(最好從c/C++或java)來獲得相應的彙編代碼。如何編譯高級代碼以獲取彙編代碼?

+0

可能重複[使用GCC生成可讀的程序集?](http://stackoverflow.com/questions/1289881/using-gcc-to-produce-readable-assembly) – Mark 2012-01-06 12:07:29

回答

4

gcc can dump an assembly listing using -S switch - 它會將彙編代碼發送到擴展名爲.s的文件。例如,以下命令:

gcc -O2 -S -c foo.c 

會將生成的彙編代碼留在文件foo.s.

如果要與它被轉換到組裝在一起看到C代碼,使用命令行是這樣的:

gcc -c -g -Wa,-a,-ad [other GCC options] foo.c > foo.lst 

將輸出合併的C /組件列表的文件foo.lst 。

大多數編譯器都會支持類似的東西來幫助調試編譯器本身。 For Visual C++, see this guide.

+0

你知道g ++是否有這個功能嗎?如果是的話,你如何使用它? thx – user176121 2009-09-25 11:12:32

+0

是的,它有!檢查g ++的man頁面以獲取更多詳細信息 – vpram86 2009-09-25 11:15:40

+0

g ++的選項應該完全相同 – 2009-09-25 11:16:22

0

這些語言有很大不同,因爲C和C++通常編譯爲機器碼,而Java使用虛擬機。你不能合理地將Java編譯成彙編語言(如果你想看到機器代碼,使用調試器),但使用C或C++,它應該很容易,這取決於你的編譯器。例如,使用gcc時,只需給它一個-S選項,它將生成彙編代碼文件而不是目標代碼。

+0

有一些Java編譯器(如[gcj](http://gcc.gnu.org/java/))可以編譯本機代碼而不是JVM字節碼。你可以看看生成的程序集。 – 2010-04-27 23:40:01

0

許多編譯器都提供列出生成的彙編代碼的選項。例如,gcc具有-S選項,它將在彙編之前停止編譯併爲彙編文件留下您的編號。