我正在努力学习汇编语言。我已经搜索并发现了如何反汇编一个.c文件,但我认为它会产生程序的一些优化版本。有没有办法让我可以看到与我的C文件相对应的汇编代码。
发布于 2011-04-24 02:01:09
gcc选项-O支持不同级别的优化。使用-O0禁用它们,并使用-S输出程序集。-O3是最高级别的优化。
从gcc 4.8开始,可以使用优化级别的-Og。它支持不会干扰调试的优化,并且是标准编辑-编译-调试周期的推荐默认设置。
若要将程序集的方言更改为英特尔或att,请使用-masm=intel或-masm=att。
您还可以使用-fname手动启用某些优化。
请查看gcc manual以了解更多信息。
发布于 2011-04-24 02:02:53
对于gcc,您希望省略传递给编译器的任何-O1 -O2或-O3选项,或者如果您已经有这些选项,则可以附加-O0选项以再次将其关闭。它还可以帮助您添加用于调试的-g,以便您可以在调试器中看到c源代码和反汇编的机器码。
另请参阅:http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html
发布于 2014-06-24 18:58:25
要在没有复制省略的情况下进行测试,并查看复制/移动构造函数/运算符的操作,请添加"-fno-elide-constructors“。
即使没有优化(-O0 ),GCC和Clang仍然会做复制省略,这在某些情况下具有跳过复制/移动构造函数的效果。有关副本省略的详细信息,请参阅this question。
然而,在Clang 3.4中,它确实触发了一个错误(未调用构造函数的无效临时对象),该错误已在3.5中修复。
https://stackoverflow.com/questions/5765899
复制相似问题