我有一个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
无法处理的格式存储的?
答案 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符号版本。