GNU/Linux >> Tutoriels Linux >  >> Linux

Puis-je changer 'rpath' dans un binaire déjà compilé ?

Il existe un outil plus universel que chrpath appelé patchelf . Il a été créé à l'origine pour être utilisé dans la création de packages pour Nix et NixOS (système de packages et distribution GNU/Linux).

Dans le cas où il n'y a pas de rpath dans un binaire (appelé ici rdsamp), chrpath échoue :

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

D'autre part,

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

réussit très bien.


Il existe un outil appelé chrpath qui peut faire cela - il est probablement disponible dans les packages de votre distribution.


Tout comme @user7610 l'a dit, la bonne façon de procéder est le patchelf outil.

Mais, je pense que je peux donner une réponse plus complète, couvrant toutes les commandes dont on a besoin pour faire exactement cela.

Pour un article complet sur le sujet, cliquez ici

Tout d'abord, de nombreux développeurs parlent de RPATH , mais ils signifient en fait RUNPATH . Ce sont deux sections dynamiques facultatives différentes, et le chargeur les gère très différemment. Vous pouvez en savoir plus sur la différence entre eux dans le lien que j'ai mentionné précédemment.

Pour l'instant, n'oubliez pas :

  • Si RUNPATH est défini, RPATH est ignoré
  • RPATH est obsolète et doit être évité
  • RUNPATH est préféré car il peut être remplacé par LD_LIBRARY_PATH

Voir le R[UN]PATH actuel

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

Effacer le R[UN]PATH

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

Remarques :

  • Supprime les deux RPATH et RUNPATH

Ajouter des valeurs à R[UN]PATH

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

Remarques :

  • <desired-path> est une liste de répertoires séparés par deux-points, par exemple :/my/libs:/my/other/libs
  • Si vous spécifiez --force-rpath , définit RPATH , sinon définit RUNPATH

Linux
  1. Si Chown peut changer de groupe, pourquoi Chgrp a-t-il été créé ?

  2. vérifier si un binaire compilé avec -static

  3. Mon chargeur de démarrage ne peut pas être compilé avec gcc 4.6 et 4.7 ... seulement 4.5

  4. Comment puis-je changer la version de php-cli sur Ubuntu 14.04 ?

  5. Comment puis-je modifier la disposition du clavier d'entrée dans la console ?

Puis-je changer le nom d'utilisateur de mon compte cPanel ?

Linux – Pouvons-nous obtenir des informations sur le compilateur à partir d'un binaire Elf ?

Comment puis-je changer un mot de passe de base de données sur cPanel ?

Comment puis-je changer ma version de PHP sur cPanel ?

Puis-je changer le SID d'une base de données Oracle ?

Pouvez-vous modifier la version des métadonnées sur une baie existante ?