C语言 objdump如何使用-S选项显示源代码?

jckbn6z7  于 2022-12-02  发布在  其他
关注(0)|答案(3)|浏览(484)

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

ltskdhd1

ltskdhd11#

objdump使用编译到二进制文件中的DWARF调试信息,该调试信息可能引用源文件名。如果二进制文件没有使用调试信息编译,或者objdump找不到源文件,那么在只输出的程序集中就得不到源代码。因此,基本上它是在本地系统上“查找”源文件。
当您对二进制文件使用strings时,看不到源文件名,因为DWARF使用压缩。

gab6jxml

gab6jxml2#

二进制文件中的dwarf信息存储了指令(实际上是指令指针或IP)与源文件和行号之间的Map。源文件使用完整路径指定,因此即使二进制文件被移动也可以找到它。要查看此信息,您可以使用objdump --dwarf=decodedline <binary>(当然二进制文件必须用-g编译)。
一旦你说objdump -S <binary>,它使用这个侏儒信息给予你源代码沿着反汇编。

plupiseo

plupiseo3#

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

相关问题