【问题标题】:How can I know what type of debug info is in an ELF object file?我如何知道 ELF 对象文件中的调试信息类型?
【发布时间】:2011-08-17 19:13:52
【问题描述】:

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

【问题讨论】:

  • 你能把文件寄到什么地方吗?
  • 也可以试试“objdump -W file.elf”,以防万一。我认为除非信息是 STABS,否则 objdump -g 不会高兴
  • 好吧,我想通了。好吧,我仍然不知道 ELF 文件包含什么类型的调试信息,但我找到了提取它的命令。 ddump2 -D elffile 可以解决问题。我认为ddump2属于diab编译器自带的工具链。

标签: c elf debug-symbols powerpc


【解决方案1】:

您可能应该使用nm

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

您也可以使用ldd 之类的工具来查看二进制文件需要哪些库。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在 GNU/Linux 中:

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-19
        • 2022-01-20
        • 2010-12-24
        • 1970-01-01
        • 2015-09-08
        • 1970-01-01
        • 2012-09-15
        • 2015-09-15
        • 1970-01-01
        相关资源
        最近更新 更多