为什么objdump不显示.bss,.shstratab,.symtab和.strtab部分?

时间:2014-03-04 00:42:01

标签: c elf objdump

我目前正在C中进行自己的objdump实现。

对于我的-s选项,我必须显示ELF文件部分的全部内容。

我做得很好,但我显示的部分比“真正的”objdump更多。

实际上,它不会输出.bss,.shstrtab,.symtab和.strtab部分。

我正在寻找Shdr结构上的sh_flags值,但我找不到任何逻辑......

为什么objdump -s没有显示这些部分?

2 个答案:

答案 0 :(得分:9)

  

为什么objdump -s没有显示这些部分?

Objdump基于libbfd,它抽象出ELF的许多复杂性,并且当对象倾向于 有三个部分时编写。

因此,objdump非常缺乏。除了不显示(某些)现有部分之外,它还可以“合成”根本不存在的部分,并执行其他奇怪的技巧。这更像是一个libbfd错误 - 它的抽象层根本不告诉objdump关于“缺失”的部分。

TL; DR:不要使用objdump。请改用readelf

答案 1 :(得分:0)

尝试使用sh_size和sh_type,而不是sh_flags。

ELF specification

引用
  

sh_size 该成员以字节为单位给出了部分的大小。除非   section类型是SHT_NOBITS,该部分占用了sh_size字节   文件中。 SHT_NOBITS类型的一部分可能具有非零大小,但它   在文件中没有空间