2

次のことを前提とします。

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偽に等しい

関連する文字列テーブル セクション ヘッダーを参照するにはどうすればよいですか?

4

3 に答える 3

4

おそらく、->strtab_index構造体メンバーは、シンボル テーブル ヘッダーのメンバーを参照していsh_nameます (ELF 仕様で指定されているように)。

これは実際には、セクション ヘッダーの文字列テーブル セクションのインデックスであり、文字列テーブルの場所ではありません。

文字列テーブルは、独自のセクションに格納されます。特に、セクション ヘッダー文字列テーブルはe_shstrndx、ELF ヘッダーのメンバーによって配置されます。これは、セクション ヘッダー テーブルへのインデックスです。したがってsectionHeaderTable[elf_header->e_shstrndx]、おそらく必要なものです (セクション ヘッダー文字列テーブルのセクション ヘッダー)。

于 2010-05-28T03:22:30.040 に答える
0

セクション ヘッダーの sh_name メンバーは、ELF ヘッダーの e_shstrndx メンバーによって指定されるように、セクション ヘッダー文字列テーブル セクションへのインデックスを保持します。 ELF仕様

于 2013-06-10T16:55:00.543 に答える
0

通常、各バイナリには 3 つの文字列テーブルが含まれます。

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

上記の質問では、.shstrtab に関心があります。展開すると、セクション ヘッダー 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.

詳細が必要な場合はコメントしてください

于 2012-05-18T15:54:15.127 に答える