Come faccio a esaminare il contenuto di una sezione di dati di un file ELF su Linux?
-
18-09-2019 - |
Domanda
Ho usato objdump
guardare codice assembly nei binari ELF Linux.
A volte c'è un salto indiretta attraverso una tabella di salto che è memorizzato nella sezione di rodata
(dati di sola lettura).
Come arrivare objdump
o qualsiasi altro strumento di mostrarmi i contenuti di questa sezione dati?
ho potuto eseguire il programma ed esaminare gli indirizzi rilevanti nel debugger, ma io non voglio farlo perché deve essere fatto in modo interattivo.
La risposta ideale identificherà uno strumento che non solo mi mostra il contenuto, ma mi permette di controllare il formato di visualizzazione, più od
fa.
Soluzione
objdump -s -j .rodata exefile
dà un esagono / stampabile scarico ASCII side-by-side dei contenuti della sezione rodata
come:
Contents of section .rodata:
0000 67452301 efcdab89 67452301 efcdab89 gE#.....gE#.....
0010 64636261 68676665 64636261 68676665 dcbahgfedcbahgfe
Non sembra che ci sia qualcosa in là per controllare la formattazione, ma è un inizio. Si può sempre undump l'esagono e dei mangimi a OD, suppongo:)
Altri suggerimenti
readelf -x .rodata hello_world.o
dà:
Hex dump of section '.rodata':
0x00000000 48656c6c 6f20776f 726c6421 0a Hello world!.
Si dovrebbe preferire readelf
quando possibile, in quanto objdump
semplicemente non mostra alcune sezioni come .symtab
: Perché objdump non mostrano .bss, .shstratab, .symtab e sezioni .strtab?
È anche possibile estrarre i byte prime con le tecniche menzionate in: come si fa a estrarre solo il contenuto di una sezione ELF e come detto da ysdx .
È possibile ottenere il RAW (non Hexdump-ndr) Sezione ELF con:
# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat
Qui sto usando | cat
al fine di costringere stdout ad essere un tubo. /dev/stdout
potrebbe funzionare in modo imprevisto se stdout è un file. .text=-
non invia a stdout, ma al file -
.
objcopy e objdump avere alcune carenze (perché si basano su BFD che astrae diversi formati eseguibili).
Aggiornamento: ho scritto uno strumento rel="noreferrer"> per fare questo che non si basa su BFD.