GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann ich 'rpath' in einer bereits kompilierten Binärdatei ändern?

Es gibt ein universelleres Tool als chrpath genannt patchelf . Es wurde ursprünglich zur Verwendung beim Erstellen von Paketen für Nix und NixOS (Paketsystem und eine GNU/Linux-Distribution) erstellt.

Falls es keinen rpath in einer Binärdatei gibt (hier rdsamp genannt), chrpath schlägt fehl:

chrpath -r '$ORIGIN/../lib64' rdsamp 
rdsamp: no rpath or runpath tag found.

Andererseits

patchelf --set-rpath '$ORIGIN/../lib64' rdsamp

gelingt prima.


Es gibt ein Tool namens chrpath das kann das - es ist wahrscheinlich in den Paketen Ihrer Distribution verfügbar.


Genau wie @user7610 sagte, der richtige Weg ist der patchelf Werkzeug.

Aber ich habe das Gefühl, dass ich eine umfassendere Antwort geben kann, die alle Befehle abdeckt, die man braucht, um genau das zu tun.

Für einen umfassenden Artikel zu diesem Thema klicken Sie hier

Zunächst einmal sprechen viele Entwickler von RPATH , aber eigentlich bedeuten sie RUNPATH . Dies sind zwei verschiedene optionale dynamische Abschnitte, und der Lader handhabt sie sehr unterschiedlich. Sie können mehr über den Unterschied zwischen ihnen in dem Link lesen, den ich zuvor erwähnt habe.

Denken Sie vorerst nur daran:

  • Falls RUNPATH gesetzt ist, RPATH wird ignoriert
  • RPATH ist veraltet und sollte vermieden werden
  • RUNPATH wird bevorzugt, da es durch LD_LIBRARY_PATH überschrieben werden kann

Siehe den aktuellen R[UN]PATH

readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"

Löschen Sie den R[UN]PATH

patchelf --remove-rpath <path-to-elf>

Hinweise:

  • Entfernt beide RPATH und RUNPATH

Werte zu R[UN]PATH hinzufügen

patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>

Hinweise:

  • <desired-path> ist eine durch Doppelpunkte getrennte Verzeichnisliste, z. B.:/my/libs:/my/other/libs
  • Wenn Sie --force-rpath angeben , setzt RPATH , setzt andernfalls RUNPATH

Linux
  1. Mein Bootloader lässt sich nicht mit gcc 4.6 und 4.7 kompilieren ... nur 4.5

  2. Wie kann ich das Layout der Eingabetastatur in der Konsole ändern?

  3. Wie kann ich eine nicht vertrauenswürdige ausführbare Datei sicher unter Linux ausführen?

  4. Kann mprotect() verwendet werden, um die Berechtigungen von .rodata zu ändern?

  5. Bevor Sie VMware ausführen können, müssen mehrere Module kompiliert werden

Kann ich den Benutzernamen meines cPanel-Kontos ändern?

Wie kann ich ein Datenbankpasswort auf cPanel ändern?

Wie kann ich meine PHP-Version auf cPanel ändern?

Wie kann ich eine Binärdatei aus einer .py-Datei erhalten?

Kann ich die SID einer Oracle-Datenbank ändern?

Können Sie die Metadatenversion für ein vorhandenes Array ändern?