2013-06-10 5 views
1

Как найти раздел .init? Заголовок секции имеет поле Elf32_Word sh_name. Поэтому я предполагаю, что мне нужно пройти через все разделы, чтобы найти имя с именем .init Но не является массивом символов. Это индекс записи в String Table. Где находится таблица строк? В заголовке ELF есть поле elfHdr.e_shstrndx. Это индекс раздела, где находится String Table. Итак, чтобы вычислить смещение таблицы String, я использую формулу, которая описана ниже.Поиск .init в файле ELF

offset = ((elfHdr.e_shstrndx)*elfHdr.e_shentsize)+elfHdr.e_shoff, 
where 
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. 

Но отклоненное смещение не является правильным смещением таблицы строк. Я пробовал его в разных файлах. Может быть, есть еще один способ определить, является ли раздел .init или нет?

ответ

1

Кажется, что вы почти правильно поняли.

Вычисленное значение offset - это смещение файла в байтах заголовка раздела раздела String Table. Опять же, это начало заголовка этого раздела, и это будет структура типа Elf32_Shdr. Теперь вы должны прочитать его sh_offset и это будет смещением к списку строк, которые вы ищете.

+0

Спасибо! Это верно – Qwerty