![如何查看g++生成的目标代码?](https://linux22.com/image/963180/%E5%A6%82%E4%BD%95%E6%9F%A5%E7%9C%8Bg%2B%2B%E7%94%9F%E6%88%90%E7%9A%84%E7%9B%AE%E6%A0%87%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
g++ -c xyz.cpp
创建目标文件xyz.o
但是当我在 vim 编辑器中打开它时,它会显示一些奇怪的文本......
怎样才能看到机器码?
可以使用什么包来打开并查看该机器代码?
答案1
检查binutils
包裹。
在其中你会发现 objdump——显示来自目标文件的信息。
然后尝试运行objdump -d xyz.o
。
答案2
编译器生成的机器代码不应该是人类可读的,而是完全优化的,以便在处理器上尽可能快地运行。
然而,你能从二进制文件中读取符号如下:
$ nm main.o | c++filt
U _Unwind_Resume
U FactoryImpl::FactoryImpl()
U UI::UI(Subject*)
U operator delete(void*)
U operator new(unsigned long)
U __gxx_personality_v0
0000000000000000 T main
笔记:
nm
并且c++filt
来自binutils
您在开发时可能已经拥有的包。- 您只能查看没有被编译器选项删除的符号。
我刚刚意识到我的回答并没有真正回答你关于读取实际机器代码的问题。但是,我认为它反而提供了一些有用的信息。要读取处理器的汇编级操作,请使用objdump -d
@hnasarat 建议的方法
答案3
您应该使用该-S
标志来使编译器输出汇编代码。
因此,对于您的示例,代码将是g++ -S xyz.cpp
,并且程序集将被打印在xyz.s
。