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

ano*_*non 26 c linux gcc objdump disassembly

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

caf*_*caf 30

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

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

  • @jww:“gcc”的“-g”选项启用调试信息,而 objdump 的“-S”选项则通过源交错进行反汇编。但问题不是问如何做到这一点;而是问如何做到这一点。提问者已经知道这一点,他们而是问这是如何实现的(“objdump”如何找到要交错的源)。 (2认同)

vkr*_*rnt 10

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

一旦你说它objdump -S <binary>使用这个矮人信息给你源代码和反汇编.

  • 也许你应该提供一个活生生的例子。我无法让 objdump 提供带有交错源代码行号的反汇编。 (2认同)