2010-05-24 29 views
7

Attualmente sto cercando un modo per aggiungere dati a un eseguibile ELF già compilato, cioè incorporare un file nell'eseguibile senza ricompilarlo.Comprimere un file in un eseguibile ELF

Potrei facilmente farlo utilizzando cat myexe mydata > myexe_with_mydata, ma non ho potuto accedere ai dati dall'eseguibile perché non conosco la dimensione dell'eseguibile originale.

Qualcuno ha un'idea di come potrei implementarlo? Ho pensato di aggiungere una sezione all'eseguibile o utilizzare un indicatore speciale (0xBADBEEFC0FFEE per esempio) per rilevare l'inizio dei dati nell'eseguibile, ma non so se c'è un modo più bello per farlo.

Grazie in anticipo.

risposta

5

si potrebbe aggiungere il file al file elfo come una sezione speciale con objcopy (1):

objcopy --addsection sname=file oldelf newelf 

aggiungerà il file da oldelf e scrivere i risultati per newelf (oldelf non ci sarà modificato) È quindi possibile utilizzare libbfd per leggere il file elf ed estrarre la sezione per nome, o semplicemente eseguire il rollover del proprio codice che legge la tabella delle sezioni e trova la sezione. Assicurati di utilizzare un nome di sezione che non entri in collisione con quello che il sistema si aspetta - purché il tuo nome non inizi con un ., dovresti stare bene.

+0

Non sapevo che l'objcopy potesse farlo! Grazie. –

1

Ho creato una piccola libreria denominata elfdataembed che fornisce un'interfaccia semplice per estrarre/referenziare sezioni incorporate utilizzando objcopy. Ciò consente di passare l'offset/dimensione a un altro strumento o di fare riferimento direttamente al runtime utilizzando i descrittori di file. Speriamo che questo possa aiutare qualcuno in futuro.

Vale la pena ricordare che questo approccio è più efficiente rispetto alla compilazione di un simbolo, poiché consente agli strumenti esterni di fare riferimento ai dati senza dover essere estratto, e inoltre non richiede l'intero binario da caricare in memoria per estrarre/riferimento

Problemi correlati