GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puedo cambiar 'rpath' en un binario ya compilado?

Hay una herramienta más universal que chrpath llamado patchelf . Originalmente fue creado para usarse en la creación de paquetes para Nix y NixOS (sistema de empaquetado y una distribución de GNU/Linux).

En caso de que no haya rpath en un binario (aquí llamado rdsamp), chrpath falla:

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

Por otro lado,

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

tiene éxito muy bien.


Hay una herramienta llamada chrpath que puede hacer esto, probablemente esté disponible en los paquetes de su distribución.


Tal como dijo @user7610, el camino correcto a seguir es el patchelf herramienta.

Pero siento que puedo dar una respuesta más completa, cubriendo todos los comandos que uno necesita para hacer exactamente eso.

Para obtener un artículo completo sobre el tema, haga clic aquí

En primer lugar, muchos desarrolladores hablan de RPATH , pero en realidad significan RUNPATH . Estas son dos secciones dinámicas opcionales diferentes, y el cargador las maneja de manera muy diferente. Puede leer más sobre la diferencia entre ellos en el enlace que mencioné antes.

Por ahora, recuerda:

  • Si RUNPATH está configurado, RPATH se ignora
  • RPATH está en desuso y debe evitarse
  • RUNPATH se prefiere porque puede ser anulado por LD_LIBRARY_PATH

Ver el R[UN]PATH actual

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

Borrar la RUTA R[UN]

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

Notas:

  • Elimina ambos RPATH y RUNPATH

Añadir valores a R[UN]PATH

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

Notas:

  • <desired-path> es una lista de directorios separados por dos puntos, por ejemplo:/my/libs:/my/other/libs
  • Si especifica --force-rpath , establece RPATH , de lo contrario establece RUNPATH

Linux
  1. Si Chown puede cambiar de grupo, ¿por qué se creó Chgrp?

  2. Mi gestor de arranque no se puede compilar con gcc 4.6 y 4.7 ... solo 4.5

  3. ¿Cómo puedo cambiar la versión de php-cli en Ubuntu 14.04?

  4. ¿Cómo puedo ejecutar un ejecutable que no es de confianza en Linux de forma segura?

  5. ¿Puedo cambiar el SID de una base de datos Oracle?

¿Puedo cambiar el nombre de usuario de mi cuenta de cPanel?

Linux:¿podemos obtener información del compilador de un binario Elf?

¿Cómo puedo cambiar la contraseña de una base de datos en cPanel?

¿Cómo puedo cambiar mi versión de PHP en cPanel?

¿Cómo puedo obtener un binario de un archivo .py?

Antes de poder ejecutar VMware, se deben compilar varios módulos