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