C'è uno strumento per modificare le voci della libreria condivisa nella sezione dinamica di un binario ELF? Vorrei modificare esplicitamente le dipendenze della libreria condivisa nel mio file binario (ad es. Sostituire il percorso della libreria esistente con un percorso personalizzato)Strumento per modificare la sezione dinamica di un binario ELF
risposta
sostituire percorso alla libreria esistente con un percorso personalizzato
Se questa è la vostra libreria, allora probabilmente lo collega così:
$ cc -o prog1 -l/full/path/to/libABC.so prog1.o
al posto del corretto:
$ cc -o prog1 -L/full/path/to/ -lABC prog1.o
Il primo approccio indica al linker di Linux che l'applicazione ha bisogno di pre Cisamente quella libreria, solo quella libreria e nessuna sostituzione dovrebbero essere possibili. Il secondo approccio dice che l'applicazione ha bisogno della libreria che dovrebbe essere installata da qualche parte nel sistema, nel percorso della libreria predefinito o in uno puntato da $ LD_LIBRARY_PATH (verrà cercato durante l'esecuzione). -L viene utilizzato solo durante il tempo di collegamento.
Altrimenti, invece di rattoppare l'ELF, prima controlla se è possibile sostituire la libreria usando un collegamento simbolico. Questo è il solito trucco: è difficile modificare l'eseguibile in seguito, ma è molto facile cambiare la posizione dei punti di collegamento simbolico.
È possibile controllare la variabile di ambiente LD_LIBRARY_PATH
.
Se guardate la sezione .dynsym in Linux tramite readelf
, ti basta vedere qualcosa di simile:
1: 0000000000000000 163 FUNC GLOBAL DEFAULT UND [email protected]_2.2.5 (2)
che contiene solo un nome simbolico della libreria. Tuttavia, se si include le informazioni caricatore dinamico, si ottiene:
libc.so.6 => /lib/libc.so.6 (0x00002ba11da4a000)
/lib64/ld-linux-x86-64.so.2 (0x00002ba11d82a000)
Così come detto, la cosa più facile da fare in assoluto (supponendo che si sta facendo questo per il debug, e non per sempre) sarebbe solo quello di creare un nuova sessione, esporta il tuo percorso personalizzato davanti allo LD_LIBRARY_PATH
esistente e vai da lì.
- 1. Come posso rendere GCC compilare la sezione .text come scrivibile in un binario ELF?
- 2. Strano binario ELF
- 3. Importare nomi nel binario ELF
- 4. Aggiunta di una sezione al file ELF
- 5. Come posso esaminare il contenuto di una sezione di dati di un file ELF su Linux?
- 6. Come rimuovere una sezione ELF specifica, senza rimuovere altri simboli?
- 7. gcc ha qualche opzione per aggiungere informazioni sulla versione nel file binario ELF?
- 8. scopo della sezione .rel.dyn nelle librerie di sistema Android ELF
- 9. Come si estrae solo il contenuto di una sezione ELF
- 10. Strumento per modificare la combinazione di colori CSS
- 11. Qualsiasi strumento/software in Windows per la visualizzazione del formato di file ELF?
- 12. Sezione ELF flush dalla RAM dopo l'inizializzazione della libreria
- 13. Leggere la voce GOT in Elf Binary
- 14. ricevendo il membro sh_name in un'intestazione sezione del file elf
- 15. delocalizzazioni Processing ELF - comprendere le relocs, i simboli, i dati di sezione e come funzionano insieme
- 16. Patching di codice/simboli in un binario ELF con collegamento dinamico
- 17. Comprimere un file in un eseguibile ELF
- 18. Dov'è il codice per il gestore di segnali predefinito nel binario ELF?
- 19. Modifica file elf
- 20. Ottenere indirizzo caricato di un binario ELF, dlopen non sta funzionando come previsto
- 21. Linux, GNU GCC, ld, script di versione e formato binario ELF - Come funziona?
- 22. Strumento Java per modificare il codice di prova
- 23. Come modificare il runtime della sezione web.config?
- 24. Dove si trova la tabella di importazione nel file ELF?
- 25. È possibile modificare un file binario utilizzando la riga di comando di Windows?
- 26. Reading ELF in C
- 27. Qual è la differenza tra la sezione .got e .got.plt?
- 28. Come si esegue la cross compilazione di eseguibili ELF per Android?
- 29. Come posso modificare la posizione di un progetto in Eclipse?
- 30. Come si ottengono gli indirizzi iniziali e finali di una sezione ELF personalizzata in C (gcc)?