GNU/Linux >> Linux Esercitazione >  >> Linux

Strumento per modificare la sezione dinamica di un binario ELF

sostituire il percorso della libreria esistente con un percorso personalizzato

Se questa è la tua libreria, probabilmente la stai collegando in questo modo:

$ cc -o prog1 -l/full/path/to/libABC.so prog1.o

invece del corretto:

$ cc -o prog1 -L/full/path/to/ -lABC prog1.o

Il primo approccio dice al linker Linux che l'applicazione ha bisogno proprio di quella libreria, solo quella libreria e nessun override dovrebbe essere possibile. Il secondo approccio indica che l'applicazione ha bisogno della libreria che verrebbe installata da qualche parte sul sistema, nel percorso della libreria predefinito o in uno indicato da $LD_LIBRARY_PATH (verrebbe cercato durante l'esecuzione). -L è usato solo durante il collegamento.

Altrimenti, invece di correggere l'ELF, controlla prima se puoi 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.


patchelf è quello che vuoi

$ patchelf --replace-needed LIB_ORIGIN  LIB_NEW  ELF_FILE

Per vedere l'effetto

$ readelf -d ELF_FILE

Installare gli strumenti è facile:

$ sudo apt-get install patchelf readelf

Linux
  1. Un ambiente simile a una shell per l'elaborazione binaria?

  2. Deepin System Monitor – Un elegante strumento di monitoraggio del sistema per Deepin OS

  3. Libreria condivisa dinamica C++ su Linux

  4. Aggiunta di una sezione al file ELF

  5. Come compilare una libreria dinamica per un'applicazione JNI su Linux?

Ctop:uno strumento di monitoraggio della riga di comando per i container Linux

Scegli:uno strumento di ricerca fuzzy da riga di comando per Linux

Un'introduzione a Cockpit, uno strumento di amministrazione basato su browser per Linux

Configurazioni di indirizzi IP statici e dinamici per DHCP

Sostituisci il percorso in binario per un particolare utente

Strumento per misurare la qualità dell'entropia?