Доступ к заголовку раздела таблицы строк ELF - PullRequest
2 голосов
/ 28 мая 2010

Допустим следующее:

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 ]

3 голосов
/ 28 мая 2010

Предположительно, элемент ->strtab_index struct ссылается на sh_name член заголовка таблицы символов (как указано в спецификации ELF).

Это на самом деле индекс в разделе таблицы строк заголовка раздела, а не местоположение таблицы строк.

Строковые таблицы хранятся в своих собственных разделах. В частности, таблица строк заголовка раздела находится в элементе e_shstrndx заголовка ELF. Это индекс в таблице заголовков разделов, поэтому sectionHeaderTable[elf_header->e_shstrndx], вероятно, то, что вам нужно (заголовок раздела для таблицы строк заголовка раздела).

0 голосов
/ 10 июня 2013

Член sh_name заголовка раздела содержит индекс в разделе таблицы строк заголовка раздела, как указано элементом e_shstrndx заголовка ELF. ELF Спецификация

0 голосов
/ 18 мая 2012

Каждый двоичный файл обычно содержит три таблицы String -

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.

Пожалуйста, оставьте комментарий, если вам нужно больше деталей

...