如何找到.init
部分?
节标题包含字段Elf32_Word sh_name
。所以我想我必须遍历所有部分才能找到一个名为.init
的部分,但sh_name
不是一个字符数组。它是String Table中的条目索引。
字符串表在哪里? ELF标题中有字段elfHdr.e_shstrndx
。它是String Table所在的部分索引。
因此,要计算字符串表I的偏移量,请使用下面描述的公式。
offset = ((elfHdr.e_shstrndx)*elfHdr.e_shentsize)+elfHdr.e_shoff,
where
elfHdr.e_shstrndx = index where we can find .shstrtab
elfHdr.e_shentsize = Size of each Section Header
elfHdr.e_shoff = Offset at which section header starts.
但结果偏移不是字符串表的正确偏移。我已尝试过各种文件。
可能有另一种方法来确定部分是否为.init
?
答案 0 :(得分:1)
看起来你几乎做对了。
您计算的offset
是字符串表部分的节头的文件偏移量(以字节为单位)。同样,这是本节标题的开头,它将是Elf32_Shdr
类型的结构。现在你应该阅读它的sh_offset
和这个将是你正在寻找的字符串列表的偏移量。