在ELF文件中搜索.init部分

时间:2013-06-10 17:06:04

标签: linux elf string-table

如何找到.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

1 个答案:

答案 0 :(得分:1)

看起来你几乎做对了。

您计算的offset是字符串表部分的节头的文件偏移量(以字节为单位)。同样,这是本节标题的开头,它将是Elf32_Shdr类型的结构。现在你应该阅读它的sh_offset这个将是你正在寻找的字符串列表的偏移量。