二进制文件中是否有对源文件的引用?我尝试在二进制文件上运行字符串,但找不到对列出的源文件的任何引用...
答案 0 :(得分:27)
objdump
使用编译到二进制文件中的DWARF调试信息,该信息引用源文件名。如果二进制文件没有使用调试信息进行编译,或者objdump
找不到源文件,那么就不会在输出中获得源代码 - 只有汇编。
在二进制文件上使用strings
时,您看不到源文件名,因为DWARF使用压缩。
答案 1 :(得分:10)
二进制文件中的矮化信息存储指令(实际上是指令指针或IP)与源文件和行号之间的映射。源文件使用完整路径指定,因此即使二进制文件被移动也可以找到它。要查看此信息,您可以使用objdump --dwarf=decodedline <binary>
(必须使用-g
编译二进制文件。)
一旦你说objdump -S <binary>
它就会使用这个矮人信息来提供源代码以及反汇编。
答案 2 :(得分:3)
我的理解是,objdump
要显示二进制代码中的源代码,有一个前提条件:必须将DWARF调试信息编译到二进制文件中。 (gcc -g sourcefile
或gcc -gdwarf-2 sourcefile
)
通过处理这个DWARF信息objdump
能够得到@ vlcekmi3和@vkrnt回答的源代码