有没有办法检查从下面的代码( file1.o )生成的目标文件是否存在临时引入的编译器?我们可以使用哪些工具从目标文件中获取此类信息?
//file1.cpp
void func(const int& num){}
int main(){ func(2); }
有没有办法检查从下面的代码( file1.o )生成的目标文件是否存在临时引入的编译器?我们可以使用哪些工具从目标文件中获取此类信息?
//file1.cpp
void func(const int& num){}
int main(){ func(2); }
我能想到的最简单的方法是加载一个使用目标文件的程序并在调试器中反汇编该函数。您发布的程序代码可以正常工作。当您单步进入函数时,只需中断调用func
然后显示汇编程序。
在更复杂的程序中,您通常可以按名称显示给定函数的汇编代码。检查您的调试器文档以了解如何执行此操作。在 Windows (Visual Studio) 上,您可以打开Disassembly
窗口并输入函数名称以显示汇编代码。
如果您有源代码,大多数编译器都允许您输出汇编程序,有时会与源代码混合。对于 Visual C++,这是/Fa。
如果您在 ELF 系统上并且有 GNU binutils,您可以调用readelf
,可能使用-s
开关。
如果您有可用的源代码,那么查看编译器生成的汇编文件(gcc 的 -save-temps)可能更容易。否则,objdump
就是你的朋友。
您可以使用clang -cc1 --ast-print-xml
来获取翻译单元的 XML 表示。从 AST 可以很容易地检测到临时对象的存在。