reemplazar la ruta a la biblioteca existente con una ruta personalizada
Si esta es su propia biblioteca, entonces probablemente la vincule así:
$ cc -o prog1 -l/full/path/to/libABC.so prog1.o
en lugar del propio:
$ cc -o prog1 -L/full/path/to/ -lABC prog1.o
El primer enfoque le dice al enlazador de Linux que la aplicación necesita precisamente esa biblioteca, solo esa biblioteca y ninguna anulación debería ser posible. El segundo enfoque dice que la aplicación necesita la biblioteca que se instalaría en algún lugar del sistema, ya sea en la ruta de la biblioteca predeterminada o en una señalada por $LD_LIBRARY_PATH (se buscaría durante el tiempo de ejecución). -L se usa solo durante el tiempo de enlace.
De lo contrario, en lugar de parchear el ELF, primero verifique si puede sustituir la biblioteca usando un enlace simbólico. Este es el truco habitual:es difícil modificar el ejecutable después, pero es muy fácil cambiar la ubicación de los puntos de enlace simbólico.
patchelf
es lo que quieres
$ patchelf --replace-needed LIB_ORIGIN LIB_NEW ELF_FILE
Para ver el efecto
$ readelf -d ELF_FILE
Instalar las herramientas es fácil:
$ sudo apt-get install patchelf readelf