Поиск раздела.init в файле ELF
Как я могу найти раздел .init
? Заголовок раздела имеет поле Elf32_Word sh_name
, Итак, я полагаю, что мне нужно пройти через все разделы, чтобы найти один с именем .init
Но sh_name
это не массив символов. Это индекс записи в таблице строк. Где находится Струнный Стол? Есть поле elfHdr.e_shstrndx
в заголовке 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
Вы вычислили смещение файла в байтах заголовка раздела строки таблицы строк. Опять же, это начало заголовка этого раздела, и это будет структура типа Elf32_Shdr
, Теперь вы должны прочитать его sh_offset
и это будет смещение в списке строк, которые вы ищете.