GNU/Linux >> Znalost Linux >  >> Linux

Mohu změnit 'rpath' v již zkompilovaném binárním souboru?

Existuje univerzálnější nástroj než chrpath s názvem patchelf . Původně byl vytvořen pro použití při vytváření balíčků pro Nix a NixOS (systém balení a distribuce GNU/Linux).

V případě, že v binárním souboru (zde nazývaném rdsamp) není rpath, chrpath selže:

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

Na druhou stranu

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

uspěje v pohodě.


Existuje nástroj nazvaný chrpath který to umí – pravděpodobně je dostupný v balíčcích vaší distribuce.


Jak řekl @user7610, správnou cestou je patchelf nástroj.

Cítím však, že mohu poskytnout komplexnější odpověď, která pokrývá všechny příkazy, které je k tomu potřeba udělat.

Pro komplexní článek na toto téma klikněte sem

Za prvé, mnoho vývojářů mluví o RPATH , ale ve skutečnosti znamenají RUNPATH . Jedná se o dvě různé volitelné dynamické sekce a nakladač s nimi zachází velmi odlišně. Více o rozdílu mezi nimi si můžete přečíst v odkazu, který jsem zmínil dříve.

Prozatím si pamatujte:

  • Pokud RUNPATH je nastaven, RPATH je ignorováno
  • RPATH je zastaralé a je třeba se mu vyhnout
  • RUNPATH je preferováno, protože může být přepsáno LD_LIBRARY_PATH

Zobrazit aktuální R[UN]PATH

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

Vymažte R[UN]PATH

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

Poznámky:

  • Odstraní obě RPATH a RUNPATH

Přidejte hodnoty do R[UN]PATH

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

Poznámky:

  • <desired-path> je seznam adresářů oddělených dvojtečkou, např.:/my/libs:/my/other/libs
  • Pokud zadáte --force-rpath , nastaví RPATH , jinak nastaví RUNPATH

Linux
  1. použít RPATH, ale ne RUNPATH?

  2. kontrola, zda je binární soubor zkompilován s -static

  3. Jak mohu změnit rozložení vstupní klávesnice v konzole?

  1. Jak mohu bezpečně spustit nedůvěryhodný spustitelný soubor na linuxu?

  2. Lze mprotect() použít ke změně oprávnění .rodata?

  3. Jak mohu trvale změnit IP adresu a adresu brány?

  1. Jak mohu převést dvouhodnotová textová data na binární (bitová reprezentace)

  2. Jak mohu získat binární soubor ze souboru .py

  3. Mohu změnit SID databáze Oracle?