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