objdump如何设法使用-S选项显示源代码?

时间:2010-03-24 20:06:03

标签: c linux gcc disassembly objdump

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

3 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:3)

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