31

二进制文件中是否有对源文件的引用?我尝试在二进制文件上运行字符串,但找不到对列出的源文件的任何引用...

4

3 回答 3

32

objdump使用编译成二进制文件的 DWARF 调试信息,它引用源文件名。如果二进制文件没有使用调试信息进行编译,或者objdump找不到源文件,那么您的输出中就不会得到源代码——只有汇编。

在二进制文件上使用时看不到源文件名strings,因为 DWARF 使用压缩。

于 2010-03-24T22:31:03.810 回答
12

二进制文件中的 dwarf 信息存储了指令(实际上是指令指针或 IP)与源文件和行号之间的映射。源文件是使用完整路径指定的,因此即使移动二进制文件也可以找到它。要查看此信息,您可以使用objdump --dwarf=decodedline <binary>(当然必须使用 编译二进制文件-g)。

一旦你说它objdump -S <binary>使用这个矮人信息为你提供源代码以及反汇编。

于 2012-12-03T18:42:32.697 回答
4

我的理解是,objdump要从二进制代码中显示源代码,有一个前提条件:必须将 DWARF 调试信息编译成二进制。(by gcc -g sourcefileor gcc -gdwarf-2 sourcefile) 并且通过处理这个 DWARF 信息objdump能够得到源代码为@vlcekmi3 和@vkrnt 回答

于 2013-10-19T15:45:55.100 回答