Подтвердить что ты не робот

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

Я использовал objdump для просмотра кода сборки в бинарных файлах Linux ELF.

Иногда происходит косвенный переход через таблицу переходов, которая хранится в разделе rodata (только для чтения).

Как получить objdump или любой другой инструмент, чтобы показать мне содержимое этого раздела данных?

Я мог бы выполнить программу и проверить соответствующие адреса в отладчике, но я не хочу этого делать, потому что это нужно сделать в интерактивном режиме.

Идеальный ответ определит инструмент, который не только покажет мне содержимое, но и позволит мне управлять форматом отображения, как это делает od.

4b9b3361

Ответ 1

objdump -s -j .rodata exefile

дает бок о бок hex/printable ASCII дамп содержимого раздела rodata, например:

Contents of section .rodata:
 0000 67452301 efcdab89 67452301 efcdab89  gE#.....gE#.....
 0010 64636261 68676665 64636261 68676665  dcbahgfedcbahgfe

Не похоже, чтобы что-то там было для управления форматированием, но это начало. Вы всегда можете переместить шестерку и подавать ее в od, я полагаю:)

Ответ 2

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.

Ответ 3

Вы можете получить раздел ELF с RAW (не hexdump-ed) с помощью:

# 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, чтобы заставить stdout быть каналом. /dev/stdout может работать неожиданно, если stdout - это файл. .text=- не отправляет в stdout, а в файл -.

Однако objcopy и objdump имеют некоторые недостатки (потому что они основаны на BFD, который абстрагирует разные исполняемые форматы).

Обновление: Я написал инструмент, чтобы сделать это, не полагаясь на BFD.