如何知道ELF目标文件中的调试信息类型?

joh*_*j33 15 c powerpc elf debug-symbols

我有一个ELF目标文件.我想知道它包含哪种类型的调试信息.它是用PPC架构的Diab编译器(C源代码)编译的.我很确定它是用调试符号构建的.

我试过提取调试信息,dwarfdump但我不工作,所以我猜调试信息不​​是DWARF类型.

$ dwarfdump file.elf
No DWARF information present in file.elf
Run Code Online (Sandbox Code Playgroud)

使用objdump显示调试信息是空的.

$ objdump -g file.elf 
file.elf:     file format elf32-powerpc
Run Code Online (Sandbox Code Playgroud)

可能是这个ELF文件不包含调试信息,即使ELF文件中有调用的部分.debug_sfnames,.debug_srcinfo并且.debug.srcinfo?或者调试信息是以objdump无法处理的格式存储的?

Lel*_*uge 6

你应该使用nm

nm实用程序应显示出现在目标文件,可执行文件或由file命名的目标文件库中的符号信息.如果没有符号信息可用于有效的输入文件,nm实用程序应报告该事实,但不认为它是错误条件.

或者,您可以使用工具ldd来查看二进制文件所需的库.


Rya*_*ell 5

似乎没有人回答您的实际问题,即:如何以编程方式确定给定ELF二进制文件中存在的调试符号的形式。据我所知,这在ELF中没有明确给出。但是,可以通过ELF文件中特定节名称的存在来推断。例如:名为“ .debug_info”的部分表示DWARF2或更高版本,而“ .stab”的部分表示stab。快速搜索一下您的“ .debug_sfnames”会提示DWARF1。(我不知道为什么您的'dwarfdump'无法识别...也许您的dwarfdump是用于较新的DWARF,并向后兼容吗?)


Die*_*ino 5

在GNU / Linux中:

$ readelf --debug-dump=info /absolute/path/to/file | grep "Version" | uniq
Run Code Online (Sandbox Code Playgroud)

返回二进制文件中使用的DWARF符号版本。