2010-05-28 71 views
2

假设如下:访问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等于假

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

回答

2

推测->strtab_index结构成员指的是符号表头中的成员(如ELF规范中的名称)。

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

字符串表存储在他们自己的部分。部分标题字符串表格特别位于ELF标题的e_shstrndx成员之中。这是段头表的索引 - 因此sectionHeaderTable[elf_header->e_shstrndx]可能就是你想要的(段头字符串表的段头)。

0

每个二进制通常包含三个字符串表 -

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

在上面的问题,我们关心的是.shstrtab其当扩大看台 - 节头字符串表。在阅读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. 

请评论,如果u需要更多的细节

0

节头的sh_name成员持有索引到节标题字符串表部分,由ELF标题的e_shstrndx成员指定。 ELF Specification