c linux environment-variables

¿Qué es el truco LD_PRELOAD?



linux environment-variables (8)

Encontré una referencia a él recientemente sobre proggit y (hasta ahora) no está explicada.

Sospecho que this podría ser, pero no lo sé con seguridad.



Como mucha gente mencionó, usar LD_PRELOAD para precargar la biblioteca. Por cierto, puede COMPROBAR si la configuración está disponible mediante el comando ldd .

Ejemplo: suponga que necesita cargar su propio libselinux.so.1 .

> ldd /bin/ls ... libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3927b1d000) libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f3927914000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f392754f000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3927311000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f392710c000) /lib64/ld-linux-x86-64.so.2 (0x00007f3927d65000) libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f3926f07000)

Por lo tanto, establezca su entorno de precarga:

export LD_PRELOAD=/home/patric/libselinux.so.1

Revisa tu biblioteca de nuevo:

>ldd /bin/ls ... libselinux.so.1 => /home/patric/libselinux.so.1 (0x00007fb9245d8000) ...


Con LD_PRELOAD puedes dar prioridad a las bibliotecas.

Por ejemplo, puede escribir una biblioteca que implemente malloc y free . Y al cargarlos con LD_PRELOAD su malloc y free will en lugar de los estándares.


Es fácil exportar mylib.so a env:

$ export LD_PRELOAD=/path/mylib.so $ ./mybin

deshabilitar :

$ export LD_PRELOAD=


Puede anular los símbolos en las bibliotecas de valores creando una biblioteca con los mismos símbolos y especificando la biblioteca en LD_PRELOAD .

Algunas personas lo usan para especificar bibliotecas en ubicaciones no estándar, pero LD_LIBRARY_PATH es mejor para ese propósito.


Usando la ruta LD_PRELOAD , puede forzar al cargador de aplicaciones a cargar el objeto compartido proporcionado, por encima del valor predeterminado proporcionado.

Los desarrolladores utilizan esto para depurar sus aplicaciones al proporcionar diferentes versiones de los objetos compartidos.

Lo hemos utilizado para piratear ciertas aplicaciones, anulando las funciones existentes utilizando objetos compartidos preparados.


LD_PRELOAD enumera bibliotecas compartidas con funciones que anulan el conjunto estándar, tal como /etc/ld.so.preload hace /etc/ld.so.preload . Estos son implementados por el cargador /lib/ld-linux.so . Si desea anular solo algunas funciones seleccionadas, puede hacerlo creando un archivo de objeto sobrescrito y configurando LD_PRELOAD ; Las funciones en este archivo de objeto anularán solo aquellas funciones que dejen otras como estaban.

Para obtener más información sobre bibliotecas compartidas, visite http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html


Si establece LD_PRELOAD en la ruta de un objeto compartido, ese archivo se cargará antes que cualquier otra biblioteca (incluido el tiempo de ejecución de C, libc.so ). Entonces, para ejecutar ls con su implementación especial malloc() , haga esto:

$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls