2009-09-25 163 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选项,它将在汇编之前停止编译并为汇编文件留下您的编号。