Как я могу просмотреть содержимое раздела данных файла ELF в Linux?
-
18-09-2019 - |
Вопрос
я использовал objdump
посмотреть ассемблерный код в двоичных файлах Linux ELF.
Иногда происходит непрямой переход через таблицу переходов, хранящуюся в rodata
(данные только для чтения).
Как получить objdump
или любой другой инструмент, чтобы показать мне содержимое этого раздела данных?
Я мог бы выполнить программу и просмотреть соответствующие адреса в отладчике, но я не хочу этого делать, потому что это нужно делать в интерактивном режиме.
Идеальным ответом будет поиск инструмента, который не только покажет мне содержимое, но и позволит мне управлять форматом отображения, как и od
делает.
Решение
objdump -s -j .rodata exefile
дает параллельный шестнадцатеричный/печатаемый ASCII-дамп содержимого rodata
раздел типа:
Contents of section .rodata:
0000 67452301 efcdab89 67452301 efcdab89 gE#.....gE#.....
0010 64636261 68676665 64636261 68676665 dcbahgfedcbahgfe
Не похоже, что там есть что-то для управления форматированием, но это только начало.Полагаю, вы всегда можете восстановить шестнадцатеричный код и передать его od :)
Другие советы
readelf -x .rodata hello_world.o
дает:
Hex dump of section '.rodata':
0x00000000 48656c6c 6f20776f 726c6421 0a Hello world!.
Вы должны предпочесть readelf
когда это возможно, поскольку objdump
просто не показывает некоторые разделы типа .symtab
: Почему objdump не отображает разделы .bss, .shstratab, .symtab и .strtab?
Вы также можете извлечь необработанные байты с помощью методов, упомянутых в: Как извлечь только содержимое раздела ELF и как уже упоминалось от ysdx.
Вы можете получить раздел ELF в формате RAW (не в шестнадцатеричном формате) с помощью:
# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat
Здесь я использую | cat
чтобы заставить стандартный вывод быть каналом. /dev/stdout
может работать неожиданно, если стандартный вывод является файлом. .text=-
отправляет не на стандартный вывод, а на -
файл.
Однако objcopy и objdump имеют некоторые недостатки (потому что они основаны на BFD, который абстрагирует различные форматы исполняемых файлов).
Обновлять: Я написал инструмент для этого не полагается на BFD.