5

是否可以说服 GCC 发出一个中间文件,其中显示:

  1. 注释
  2. 原始来源
  3. 扩展宏定义
  4. 编译器应用的优化
  5. 生成的 C 或 C++ 代码将转换为汇编代码?

我宁愿看到中间 C/C++ 而不是汇编程序,但如果它有足够的注释,我也可以只使用汇编程序。

我正在尝试对几乎完全由宏组成的库进行逆向工程以扩展它。我还想看看优化的效果,以便给编译器更多的机会做更多的优化。(换句话说,看看我之前的尝试在哪里无效)

4

2 回答 2

6

GCC 不是直接在 C++ 代码中应用优化,而是在一些内部语言独立格式(称为 GIMPLE)中应用优化,这些格式不能轻易地还原为 C++ 代码。

根据您的需要,您可以

  • 只需扩展宏:g++ -E

  • 或查看汇编程序输出,您可以在其中看到哪一行 C++ 代码映射到哪个汇编程序块:

    g++ -g ... && objdump -S output
    

    我不建议直接从 gcc(使用 -S)输出汇编程序,因为生成的注释几乎没用。

于 2013-10-04T20:16:45.703 回答
4

图 1 和 2 显示在原始来源中。

3 您可以使用-E.

4 各个优化阶段的中间代码可以通过-da或 各种等-fdump-rtl-xxx选项获得。-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 所做的转换:

http://gcc.gnu.org/onlinedocs/gccint/Passes.html#Passes

于 2013-10-04T20:17:38.303 回答