如何找到 .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.
但是查出来的offset并不是String Table的正确offset。我已经在各种文件上试过了。
可能有另一种方法可以确定部分是否为 .init
?
最佳答案
看来你几乎做对了。
您计算的偏移量
是字符串表部分的部分标题的文件偏移量(以字节为单位)。同样,这是本节标题的开头,它将是 Elf32_Shdr
类型的结构。现在您应该阅读它的 sh_offset
,this 将是您要查找的字符串列表的偏移量。
关于linux - 在 ELF 文件中搜索 .init 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029206/