GNU/Linux >> Linux Esercitazione >  >> Linux

Posso cambiare 'rpath' in un binario già compilato?

Esiste uno strumento più universale di chrpath chiamato patchelf . È stato originariamente creato per essere utilizzato nella creazione di pacchetti per Nix e NixOS (sistema di pacchettizzazione e distribuzione GNU/Linux).

Nel caso in cui non ci sia rpath in un binario (qui chiamato rdsamp), chrpath fallisce:

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

D'altra parte,

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

riesce bene.


C'è uno strumento chiamato chrpath che può farlo - è probabilmente disponibile nei pacchetti della tua distribuzione.


Proprio come ha detto @user7610, la strada giusta da percorrere è il patchelf strumento.

Ma sento di poter dare una risposta più completa, coprendo tutti i comandi necessari per fare esattamente questo.

Per un articolo completo sull'argomento, fai clic qui

Prima di tutto, molti sviluppatori parlano di RPATH , ma in realtà significano RUNPATH . Queste sono due diverse sezioni dinamiche opzionali e il caricatore le gestisce in modo molto diverso. Puoi leggere di più sulla differenza tra loro nel link che ho menzionato prima.

Per ora, ricorda:

  • Se RUNPATH è impostato, RPATH viene ignorato
  • RPATH è deprecato e dovrebbe essere evitato
  • RUNPATH è preferito perché può essere sovrascritto da LD_LIBRARY_PATH

Vedi l'attuale R[UN]PATH

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

Cancella il R[UN]PATH

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

Note:

  • Rimuove entrambi RPATH e RUNPATH

Aggiungi valori a R[UN]PATH

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

Note:

  • <desired-path> è un elenco di directory separate da due punti, ad esempio:/my/libs:/my/other/libs
  • Se specifichi --force-rpath , imposta RPATH , altrimenti imposta RUNPATH

Linux
  1. usa RPATH ma non RUNPATH?

  2. Il mio bootloader non può essere compilato con gcc 4.6 e 4.7 ... solo 4.5

  3. Come posso modificare il layout della tastiera di input mentre sono nella console?

  4. Come posso eseguire un eseguibile non attendibile su Linux in modo sicuro?

  5. È possibile utilizzare mprotect() per modificare i permessi di .rodata?

Posso cambiare il nome utente del mio account cPanel?

Linux:possiamo ottenere informazioni sul compilatore da un binario elfo?

Come posso modificare una password del database su cPanel?

Come posso modificare la mia versione di PHP su cPanel?

Posso cambiare il SID di un database Oracle?

Puoi cambiare la versione dei metadati su un array esistente?