Как извлечь все поля из заголовка раздела для файла elf?

Таким образом, я смог получить sh_name с помощью учебника Elf здесь: http://wiki.osdev.org/ELF_Tutorial и этот вопрос: получение sh_name элемент в эльфийском файле заголовка раздела, но при использовании того же метода для получения остальных полей в заголовке раздела я не получаю тот же вывод, что и при вызове readelf -S в объектном файле I анализирую. Я распечатываю приведенную строку из следующего:

sh_strtab_p + shdr[i].sh_offset

и я ничего не получаю, когда я делаю. Это вопрос кастинга? Должен ли я вместо этого использовать его как int или что-то подобное? Я думал, что это будет строковый формат, так как предполагал, что sh_strtab является таблицей строк, связанной с заголовком раздела.


person srujzs    schedule 04.04.2017    source источник
comment
ваш входной поток читается в двоичном режиме?   -  person user4581301    schedule 04.04.2017
comment
Нет, может поэтому. Должен ли он по-прежнему быть пустым при возврате?   -  person srujzs    schedule 04.04.2017
comment
Хм, кажется, это не имеет значения? Что я делаю неправильно?   -  person srujzs    schedule 04.04.2017


Ответы (1)


Итак, оказывается, я глуп, и ответ заключается в том, чтобы просто преобразовать Elf_Shdr.sh_offset (который является uint32_t) в шестнадцатеричный, и вы получите то же значение, что и при использовании readelf. Нет необходимости использовать строковый индекс для чего-либо, кроме имени. Все остальные поля могут обрабатываться таким же образом, и если вам нужно строковое представление флагов и типов, здесь есть таблица, сопоставляющая значение с именем флага/типа: https://docs.oracle.com/cd/E19683-01/817-3677/chapter6-94076/index.html.

person srujzs    schedule 04.04.2017