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

时间:2011-08-17 19:13:53

标签: c elf debug-symbols powerpc

我有一个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无法处理的格式存储的?

3 个答案:

答案 0 :(得分:5)

您应该使用nm

  

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

在GNU / Linux中:

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

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