16

我有一个 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,这个 ELF 文件是否不包含调试信息?还是调试信息以无法处理的格式存储?.debug_srcinfo.debug.srcinfoobjdump

4

3 回答 3

7

您可能应该使用nm

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

或者,您可以使用诸如ldd查看二进制文件需要哪些库之类的工具。

于 2011-10-18T02:46:46.593 回答
6

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

于 2014-05-31T00:43:29.900 回答
6

在 GNU/Linux 中:

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

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

于 2014-12-16T16:02:53.903 回答