Как я могу просмотреть содержимое раздела данных файла ELF в Linux?

StackOverflow https://stackoverflow.com/questions/1685483

Вопрос

я использовал 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top