我正在尝试学习汇编语言。我搜索并找到了如何反汇编.c
文件的方法,但我认为它生成了一些程序的优化版本。是否有任何方法可以让我看到与我的C文件相对应的精确汇编代码。
我想要查看与我的C文件源代码完全对应的汇编代码。
我正在尝试学习汇编语言。我搜索并找到了如何反汇编.c
文件的方法,但我认为它生成了一些程序的优化版本。是否有任何方法可以让我看到与我的C文件相对应的精确汇编代码。
我想要查看与我的C文件源代码完全对应的汇编代码。
gcc选项-O
启用不同级别的优化。使用-O0
禁用它们,使用-S
输出汇编代码。-O3
是最高级别的优化。
从gcc 4.8开始,可用优化级别-Og
。它启用不会干扰调试的优化,并且是标准编辑-编译-调试周期的推荐默认值。
要将汇编语言的方言更改为intel或att,请使用-masm=intel
或-masm=att
。
您还可以使用-fname
手动启用某些优化。
请参阅gcc手册以获取更多信息。
-O0
是默认选项(无优化)。 - nos如需测试不使用复制省略并查看您的复制/移动构造函数/运算符,请添加“-fno-elide-constructors”。
即使没有优化(-O0),GCC 和 Clang 仍会执行复制省略,这会在某些情况下跳过复制/移动构造函数。有关复制省略的详细信息,请参见此问题。
但是,在Clang 3.4版本中,它会触发一个错误(未调用构造函数的无效临时对象),在3.5版本中已修复。
对于gcc编译器,您希望省略任何传递给编译器的-O1 -O2或-O3选项,如果您已经使用它们,则可以添加-O0选项以再次关闭它。此外,添加-g进行调试可能会有所帮助,这样您就可以在调试器中查看c源代码和反汇编机器代码。
另请参见:http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html
#pragma GCC push_options
/* #pragma GCC optimize ("unroll-loops") */
.... code here .....
#pragma GCC pop_options
很久以前,但仍然需要。
info - https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
list - gcc -Q --help=optimizers test.c | grep enabled
disable as many as you like with:
gcc **-fno-web** -Q --help=optimizers test.c | grep enabled
-O0
是多余的,因为它是默认值。 - Jens