假设如下:
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
我应该如何指向关联的字符串表节标题?
答案 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