为什么objdump不显示.bss,.shstratab,.symtab和.strtab部分?
我目前正在C中执行自己的objdump实现。
对于我的-s选项,我必须显示ELF文件部分的全部内容。
我做得很好,但我显示的部分比“真正的”objdump更多。
实际上,它不会输出.bss,.shstrtab,.symtab和.strtab部分。
我正在寻找Shdr结构上的sh_flags值,但我找不到任何逻辑……
为什么objdump -s没有显示这些部分?
为什么objdump -s没有显示这些部分?
Objdump基于libbfd
,它抽象出ELF的许多复杂性,并且当对象倾向于只有三个部分时编写。
因此, objdump
非常缺乏 。 除了没有显示(某些)现有部分之外,它还可能“合成”根本不存在的部分,并做其他奇怪的技巧。 这更像是一个libbfd
错误 – 它的抽象层根本不告诉objdump关于“缺失”的部分。
TL; DR:不要使用objdump
。 请改用readelf
。
尝试使用sh_size和sh_type,而不是sh_flags。
引用ELF规范
sh_size该成员给出了部分的大小(以字节为单位)。 除非节类型是SHT_NOBITS,否则该节在文件中占用sh_size字节。 SHT_NOBITS类型的一部分可能具有非零大小,但它在文件中不占用空间