GNU/Linux >> Znalost Linux >  >> Linux

Nástroj pro úpravu dynamické části binárního souboru ELF

nahradit cestu ke stávající knihovně vlastní cestou

Pokud je toto vaše vlastní knihovna, pak ji pravděpodobně propojujete takto:

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

místo správného:

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

První přístup říká linuxovému linkeru, že aplikace potřebuje přesně tuto knihovnu, pouze tuto knihovnu a žádné přepsání by mělo být možné. Druhý přístup říká, že aplikace potřebuje knihovnu, která by byla nainstalována někde v systému, buď ve výchozí cestě knihovny, nebo v té, na kterou ukazuje $LD_LIBRARY_PATH (byla by vyhledána za běhu). -L se používá pouze během doby propojení.

V opačném případě místo opravy ELF nejprve zkontrolujte, zda můžete nahradit knihovnu pomocí symbolického odkazu. Toto je obvyklý trik:je těžké později upravit spustitelný soubor, ale je velmi snadné změnit umístění bodů symbolických odkazů.


patchelf je to, co chcete

$ patchelf --replace-needed LIB_ORIGIN  LIB_NEW  ELF_FILE

Chcete-li vidět efekt

$ readelf -d ELF_FILE

Instalace nástrojů je snadná:

$ sudo apt-get install patchelf readelf

Linux
  1. Použití nástroje SS pro řešení problémů se sítí

  2. Nutty – Nástroj pro diagnostiku sítě pro Ubuntu

  3. Záhlaví souborů ELF

  1. Dynamická sdílená knihovna C++ v systému Linux

  2. Přidání sekce do souboru ELF

  3. Jak zkompilovat dynamickou knihovnu pro aplikaci JNI na linuxu?

  1. Prostředí podobné shellu pro binární zpracování?

  2. Knihovna Bluetooth pro BlueZ (Windows)

  3. Nástroj pro měření kvality entropie?