Как просмотреть содержимое раздела данных файла ELF в Linux?
Я использовал objdump
для просмотра кода сборки в бинарных файлах Linux ELF.
Иногда происходит косвенный переход через таблицу переходов, которая хранится в разделе rodata
(только для чтения).
Как получить objdump
или любой другой инструмент, чтобы показать мне содержимое этого раздела данных?
Я мог бы выполнить программу и проверить соответствующие адреса в отладчике, но я не хочу этого делать, потому что это нужно сделать в интерактивном режиме.
Идеальный ответ определит инструмент, который не только покажет мне содержимое, но и позволит мне управлять форматом отображения, как это делает od
.
Ответы
Ответ 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.