Supponiamo di disporre di un binario ELF collegato in modo dinamico e di sovrascrivere/reindirizzare determinate chiamate di libreria. So che posso farlo con LD_PRELOAD
, ma voglio una soluzione permanente nel binario, indipendente dall'ambiente, e che funzioni per i binari setuid/setgid, nessuno dei quali può raggiungere LD_PRELOAD
.Patching di codice/simboli in un binario ELF con collegamento dinamico
Quello che mi piacerebbe fare è aggiungere codice da file oggetto aggiuntivi (eventualmente in nuove sezioni, se necessario) e aggiungere i simboli da questi file oggetto alla tabella dei simboli del binario in modo che la nuova versione aggiunta del codice venga usato al posto del codice della libreria condivisa. Credo che questo dovrebbe essere possibile senza effettivamente effettuare alcuna delocalizzazione nel codice esistente; anche se sono nello stesso file, questi dovrebbero essere risolti in fase di esecuzione nel solito modo PLT (per quello che vale mi interessa solo le funzioni, non i dati).
Per favore non darmi risposte sulla falsariga di "Non vuoi farlo!" o "Non è portatile!" Quello su cui sto lavorando è un modo per interfacciare i binari con implementazioni di libreria condivisa alternative leggermente ABI-incompatibili. La piattaforma in questione è i386-linux (cioè 32 bit) se è importante. A meno che non mi sbagli su ciò che è possibile, potrei scrivere alcuni strumenti per analizzare i file ELF ed eseguire i miei hack, ma sospetto che ci sia un modo elegante per usare il linker GNU e altri strumenti per realizzare ciò senza scrivere un nuovo codice.
Non so se questo è funziona tutto per te, ma controlla il comando di sistema 'nm' (probabilmente lo sai già). Fornisce un po 'di informazioni su un così. – Marm0t
Wow, il trucco LD_PRELOAD sembra divertente! Anche io sto cercando un modo per farlo nel binario. Il mio problema è che il mio file binario ha un simbolo che il linker del mio BeagleBone non può risolvere. – CJxD