2010-10-13 11 views
19

Ho provato quanto segue, ma il file risultante è ancora un ELF e non puramente il contenuto della sezione.Come si estrae solo il contenuto di una sezione ELF

$ objcopy --only-section=<name> <infile> <outfile> 

Voglio solo il contenuto della sezione. C'è qualche utilità che può fare questo? Qualche idea?

+0

objcopy dovrebbe funzionare. – Jichao

risposta

17

mod Piuttosto inelegant intorno objdump e dd:

IN_F=/bin/echo 
OUT_F=./tmp1.bin 
SECTION=.text 

objdump -h $IN_F | 
    grep $SECTION | 
    awk '{print "dd if='$IN_F' of='$OUT_F' bs=1 count=$[0x" $3 "] skip=$[0x" $6 "]"}' | 
    bash 

Il objdump -h produce output prevedibile che contiene offset file Elf sezione. Ho creato il awk per generare un comando dd per la shell, dal momento che dd non supporta i numeri esadecimali. E ha alimentato il comando di shell.

In passato ho fatto tutto ciò manualmente, senza creare script, poiché è raramente necessario.

+3

+1 per forza bruta! – bstpierre

+0

Mi sembrerebbe strano venire da me, ma perché non la semplice soluzione * corretta * di @ndim ??? – Dummy00001

+1

Perché non ha funzionato per tutti i miei casi di test. Quanto sopra ha fatto. – mepcotterell

36

utilizzare il formato di output -O binary:

objcopy -O binary --only-section=.text foobar.elf foobar.text 

Proprio verificata con avr-objcopy e la sezione di un'immagine di AVR ELF .text.

Si noti che se, come indicato di seguito da Tim, la sezione non ha il flag ALLOC, potrebbe essere necessario aggiungere --set-section-flags .text=alloc per poterlo estrarre.

+1

Quando aggiungo questo, lo risultante è vuoto. Non contiene né l'intestazione della sezione ELF né il contenuto della sezione. Il comando che ho usato nella domanda non produce un file vuoto. – mepcotterell

+4

I seguenti lavori per me: objcopy -O binario -j .text/usr/bin/lpr mylprtext –

+9

Questo trucco ordinario non funziona per tutte le sezioni. 'objcopy' non copierà le sezioni che non sono contrassegnate né caricate (" load ") né allocate (" alloc "). Un commento nella fonte afferma che "I contenuti di tale sezione non sono significativi nel formato binario". –

9

objcopy --dump-section

introdotto nel Binutils 2,25, e ottiene un effetto simile a -O binary --only-section.

Usage:

objcopy --dump-section .text=output.bin input.o 

https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html documenti come:

--dump sezione nome_sezione = filename

Posizionare il contenuto della sezione denominata nome_sezione nel file nome del file, sovrascrivendo qualsiasi contenuti che potrebbero esserci stati in precedenza. Questa opzione è l'inversa di --add-section. Questa opzione è simile all'opzione - onlyly section, tranne per il fatto che non crea un file formattato, ma semplicemente scarica i contenuti come dati binari non elaborati, senza applicare alcuna delocalizzazione. L'opzione può essere specificata più di una volta.

Testata su Binutils 2.25.1 Ubuntu 15.10, produce lo stesso output https://stackoverflow.com/a/3925113/895245

+3

@Downvoters, per favore spiegami in modo che io possa imparare e migliorare le informazioni. –

Problemi correlati