2009-11-23 17 views
12

Ho bisogno di fare una cosa piuttosto insolita: eseguire manualmente un eseguibile elfo. Cioè carica tutte le sezioni in posti giusti, interrogare main() e chiamarlo (e ripulire poi). Eseguibile sarà collegato staticamente, quindi non sarà necessario collegare le librerie. Controllo anche l'indirizzo di base, quindi non preoccuparti di possibili conflitti.Caricatore ELF per spazio utente Linux

Quindi, ci sono delle librerie per questo?

ho trovato oskit e la sua liboskit_exec, ma il progetto sembra essere morti dal 2002.

Sto bene con l'assunzione di parti di progetti (rispettando licenze, ovviamente) e adattandoli al mio bisogno, ma come ho Sono piuttosto un noob nel mondo linux, non so nemmeno dove trovare quelle parti! :)

PS. Ne ho bisogno per la piattaforma ARM.

UPD Bene, la questione del caricamento di elfs sembra richiedere una buona conoscenza (sospiro), quindi sono fuori a leggere alcune specifiche e manuali. E penso che resterò fedele a bionic/linker e libelfsh. Grazie ragazzi!

risultati illustrati:

+0

* bump * Ho esattamente lo stesso problema (anche su ARM), tuttavia devo anche effettuare il riposizionamento. –

risposta

2

Un rapido apt-cache search suggerisce libelf1, libelfg0 e/o libelfsh0. Penso che il programma elfsh (nel pacchetto omonimo) potrebbe essere un interessante esempio pratico di come usare libelfsh0.

Non ho provato nessuno, ma spero che possano essere d'aiuto. Buona fortuna :-)

0

Dai uno sguardo allo libelf per leggere il formato eseguibile. Avrai problemi con questo, penso.

Suoni come, dato che non servono librerie per nulla, perché non basta mmap il file eseguibile, impostare i dati su varie aree di memoria e jmp/b in?

Non so se ARM ha un equivalente NX-bit, ma vale la pena controllare.

1

Android di Google, nella sua implementazione "bionica" della libc, ha un caricatore ELF completamente reimplementato. È ragionevolmente pulito, e probabilmente una fonte migliore di gilbc se stai cercando qualcosa di semplice.

0

Questo strumento contiene un caricatore ELF: http://bitwagon.com/rtldi/rtldi.html

ho riutilizzato il codice da rtldi un chainloader ELF in un altro progetto.Il codice è qui: http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877 e c'è uno sfondo qui: http://plash.beasts.org/wiki/Story16. (Apparentemente devo interrompere questi collegamenti perché StackOverflow non mi permette di pubblicare un link> 1!)

Problemi correlati