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

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

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

 $ dwarfdump file.elf No DWARF information present in file.elf 

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

 $ objdump -g file.elf file.elf: file format elf32-powerpc 

即使ELF文件包含名为.debug_sfnames.debug_srcinfo.debug.srcinfo部分,这个ELF文件也不包含调试信息吗? 或者调试信息是以objdump无法处理的格式存储的?

你应该使用nm

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

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

似乎没有人回答过你的实际问题,即:如何以编程方式确定给定ELF二进制文件中存在的调试符号的风格。 尽我所知,这并没有在ELF中明确给出; 但是,可以通过ELF文件中特定部分名称的存在来推断。 例如:名为“.debug_info”的部分表示DWARF2或更好,而“.stab”表示刺。 快速搜索“.debug_sfnames”可以看出DWARF1。 (我不知道为什么你的’dwarfdump’没有识别出来……也许你的dwarfdump用于较新的DWARF,并且向后兼容性倾斜?)

在GNU / Linux中:

 $ readelf --debug-dump=info /absolute/path/to/file | grep "Version" | uniq 

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