2011-04-04 29 views
0

我想看看由linux上的g ++/gcc编译器生成的代码。我假设有一些工具可以反向工程.o文件,并让我看看那里的内容比机器指令高一点。 我可能还缺少一个编译器选项,以便在编译对象文件之前简单地生成一些人类可读的东西。如果是这个编译器选项是什么?人们会推荐什么工具来查看gcc/linux目标文件?

+4

我相信-S是汇编语言输出的常用选项,它比.o文件更有用。 – 2011-04-04 15:53:43

+0

你在找什么? gcc可以用-S标志生成汇编输出,但你想要“更高级别”的东西? – pmr 2011-04-04 15:54:26

+1

请记住,当您打开各种优化选项(即-O1,-O2等)时,难以理解拆卸 – maciejs 2011-04-04 16:03:18

回答

6

你想要像objdump(binutils的一部分)的东西?这会为你反编译代码,如果还有调试符号,它也会显示它们。

+2

整个binutils套件是您的朋友。您可以使用字符串搜索.o文件中的可打印字符串,并使用nm来列出对象文件中的符号。 – maciejs 2011-04-04 16:01:29

+1

而对于AT&T语法仇恨者:'objdump -M = intel-mnemonic,intel -r -d test.o'将使用intel风格的语法进行反汇编。出于某种原因,需要指定“intel-mnemonic”和“intel”(尽管文档中另有说明)。它也必须在'-d'选项之前。 – 2011-04-04 17:17:20

6

gcc选项-S -fverbose-asm导致它输出汇编语言和注释中的注释。