2009-04-27 14 views
6

Vorrei aggiungere un nuovo flag a un file elf. Questo flag dovrebbe quindi essere disponibile nel kernel nel descrittore di processo. La mia prima idea era di usare libelf, ma sfortunatamente sembra esserci un bug con esso su Ubuntu. Probabilmente Elfedit sarebbe stato un buon strumento, ma non ho trovato una versione per Linux, in particolare Ubuntu.Modifica file elf

Quindi, mi chiedo se qualcuno può suggerire a me se c'è qualche altro strumento utile là fuori per aggiungere un flag personalizzato a un file elf?

Mille grazie per il vostro aiuto!

+0

Che bug hai incontrato in libelf? –

+0

Nel file incluso da type.c: 3: /usr/include/libelf.h:98: errore: elenco di specificatori di specificazione previsto prima di 'off64_t' ... Altro può essere trovato qui: https://bugs.launchpad.net/ubuntu/+s...ls/+bug/201078 –

risposta

2

Le persone che sono in grado di modificare il kernel per sfruttare il nuovo flag probabilmente non chiedono come aggiungere il flag alle librerie ELF.

Quindi, come pensate di avere il kernel che usa questo nuovo flag? Qual è lo scopo della bandiera?

Dal momento che si sta aggiungendo al libelf standard, non si può risolvere il bug per Ubuntu e far loro sapere che hai fatto così (rendere la correzione a loro disposizione - anche se probabilmente sarà necessario per trasmettere indietro sulla catena).

+0

Sì, hai assolutamente ragione. Se fossi un vero hacker del kernel, questo sarebbe probabilmente un compito semplice. Sfortunatamente, sto solo iniziando un po 'di lavoro pratico sul Kernel. Fondamentalmente, voglio specificare un flag nel file ELF che dice al kernel che un'applicazione ha bisogno di un "trattamento speciale". Questo trattamento speciale dovrebbe verificarsi durante le opzioni di contesto e vorrei sapere se l'attività che è stata disattivata aveva questo contrassegno personalizzato nel file ELF. In altre parole, ho 2 compiti (1) aggiungere un flag personalizzato al corrispondente eseguibile (2) rendere questo flag personalizzato disponibile al kernel –

1

Si prega di guardare ELFIO library. Contiene esempi WriteObj e Writer. Usando la libreria, sarete in grado di creare e/o modificare file binari ELF.

+0

Mi piace molto la libreria e ho lavorato con gli ultimi giorni (provando a convertirlo in un biblioteca). Ho ottenuto tutto il codice sorgente con modelli e macro convertiti (ovvero divisi in dichiarazioni e definizioni), anche se ora la lib sta andando in crash (lol). Bene, potresti considerarti una vera e propria "vera" biblioteca? – lama12345

0

(anche se vecchia questione, ma per riferimento scrivo risposta in base alla mia esperienza)

Suggerisco di leggere il file Elf nel struct di memoria, modificare bandiere e memoria di processo di caricamento con il tuo struct in memoria. Questo metodo avrà bisogno di meno effetti rispetto alla correzione dei bug. Per iniziare, controlla il file elf.c per elf, l'intestazione del programma, la struttura delle intestazioni di sezione. puoi leggere l'intestazione del file nella tua struct che dovrebbe avere tre membri struct per elf, program, section. inizia a leggere nella tua struct dall'intestazione elf. quindi leggi l'intestazione del programma sull'offset dato nell'intestazione elf (iterativamente per tutte le intestazioni del programma). Allo stesso modo puoi leggere tutte le sezioni attraverso le intestazioni di sezione. L'incapsulamento di una struttura a 3 intestazioni nella propria struttura fornisce inoltre un'opportunità di disporre di dati aggiuntivi necessari nell'altro membro della struttura.