是否可以说服 GCC 发出一个中间文件,其中显示:
- 注释
- 原始来源
- 扩展宏定义
- 编译器应用的优化
- 生成的 C 或 C++ 代码将转换为汇编代码?
我宁愿看到中间 C/C++ 而不是汇编程序,但如果它有足够的注释,我也可以只使用汇编程序。
我正在尝试对几乎完全由宏组成的库进行逆向工程以扩展它。我还想看看优化的效果,以便给编译器更多的机会做更多的优化。(换句话说,看看我之前的尝试在哪里无效)
GCC 不是直接在 C++ 代码中应用优化,而是在一些内部语言独立格式(称为 GIMPLE)中应用优化,这些格式不能轻易地还原为 C++ 代码。
根据您的需要,您可以
只需扩展宏:g++ -E
或查看汇编程序输出,您可以在其中看到哪一行 C++ 代码映射到哪个汇编程序块:
g++ -g ... && objdump -S output
我不建议直接从 gcc(使用 -S)输出汇编程序,因为生成的注释几乎没用。
图 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 所做的转换: