如何找到.init部分?
节头具有字段Elf32_Word sh_name。因此,我想我必须遍历所有部分,找到一个名为.init的字符,但是sh_name不是一个字符数组。它是字符串表中条目的索引。
字符串表在哪里?elf头中有elfHdr.e_shstrndx字段。它是字符串表所在部分的索引。
所以为了计算字符串表的偏移量,我使用下面描述的公式。

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

最佳答案

看来你几乎把它弄对了。
您计算的offset是以字节为单位的字符串表节的节头文件偏移量。同样,这是本节标题的开头,它将是Elf32_Shdr类型的结构。现在您应该读取它的sh_offset,这将是您正在查找的字符串列表的偏移量。

关于linux - 在ELF文件中搜索.init节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17029206/

10-10 17:49