Мы получили домашнее задание, в котором нам нужно взять файл ELF и вывести названия его разделов.
Мы должны делать все это, используя только данные, которые мы получаем непосредственно из заголовка ELF, то есть мы не можем использовать какие-либо процедуры «высокого уровня» — нам нужно напрямую обращаться к нужным нам данным.
Итак, я пытаюсь напечатать имя первого раздела. Я знаю, что имена должны быть в таблице строк. Это то, что у меня есть до сих пор:
Я получаю начало файла ELF, используя mmap...
elfhead =(Elf32_Ehdr *) mmap...
Я получаю смещение раздела, используя элементы в заголовке ELF.
sectionoffset = elfhead->e_shoff
тогда
section = (Elf32_Shdr*)(elfhead + sectionoffset)
nameoffset = section->sh_name
stringoffset = elfhead->e_shstrndx;
Чтобы было ясно -
- в
elfhead
у меня есть заголовок эльфа - в разделе у меня есть заголовок раздела
- в
stringoffset
у меня есть индекс внутри таблицы разделов, где должна быть таблица строк - в
nameoffset
у меня есть индекс в таблице строк, где должно быть имя первого раздела.
Как перейти к первому имени и распечатать его, учитывая приведенный выше код?