访问ELF字符串表节标题

时间:2010-05-28 02:30:09

标签: c elf

假设如下:

Elf_Section_Header *sectionHeaderTable //points to the start of a ELF section header table
Elf_Section_Header *symtabHeader  //points to the start of the symtab section header

为什么下面没有指向关联的字符串表节标题?

Elf_Section_Header *strTabSectionHeader = (Elf_Section_Header *)((char *)sectionHeaderTable + (symtabHeader->strtab_index));

strTabSectionHeader->type == SHT_STRTAB等于false

我应该如何指向关联的字符串表节标题?

3 个答案:

答案 0 :(得分:3)

大概->strtab_index struct成员指的是符号表头的sh_name成员(如ELF规范中所述)。

这实际上是部分标题字符串表部分中的索引,而不是字符串表的位置。

字符串表存储在各自的部分中。特别是节头字符串表由ELF头的e_shstrndx成员定位。这是节头表的索引 - 因此sectionHeaderTable[elf_header->e_shstrndx]可能是你想要的(节头字符串表的节头)。

答案 1 :(得分:0)

每个二进制文件通常包含三个String表 -

1. .dynstr
2. .shstrtab
3. .strtab

在上面的问题中,我们关注.shstrtab,当展开时代表 - Section Header STRing TABle。在读取ELF头时,我们在ELF头中找到以下字段 - e_shstrndx。这是我们可以找到.shstrtab的索引。以下公式可用于计算如何完成 -

offset = ((elfHdr.e_shstrndx)*elfHdr.e_shentsize)+elfHdr.e_shoff

每个参数的含义 -

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.

如果您需要更多详细信息,请发表评论

答案 2 :(得分:0)

节标题的sh_name成员保存节标题字符串表节的索引,由ELF标题的e_shstrndx成员指定。 ELF Specification