Linux 在ELF文件中搜索.init节

Linux 在ELF文件中搜索.init节,linux,elf,string-table,Linux,Elf,String Table,如何找到节.init? 节头有字段Elf32\u Word sh\u name。因此,我想我必须遍历所有部分才能找到一个名为的。init但是sh_name不是一个字符数组。它是字符串表中条目的索引。 字符串表在哪里?ELF头中有字段elfHdr.e_shstrndx。它是字符串表所在部分的索引。 所以为了计算字符串表的偏移量,我使用下面描述的公式 offset = ((elfHdr.e_shstrndx)*elfHdr.e_shentsize)+elfHdr.e_shoff, where

如何找到节
.init
? 节头有字段
Elf32\u Word sh\u 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

看来你几乎做对了


您计算的
偏移量
是字符串表节的节头的文件偏移量(以字节为单位)。同样,这是本节标题的开头,它将是
Elf32\u Shdr
类型的结构。现在您应该阅读它的
sh_offset
,这将是您要查找的字符串列表的偏移量。

看起来您几乎正确了

您计算的
偏移量
是字符串表节的节头的文件偏移量(以字节为单位)。同样,这是本节标题的开头,它将是
Elf32\u Shdr
类型的结构。现在您应该阅读它的
sh_offset
,这将是您要查找的字符串列表的偏移量