Me encontré con una referencia a él recientemente en proggit y (a partir de ahora) no se explica.
Sospecho que esto podría ser, pero no estoy seguro.
c
linux
environment-variables
Hank Gay
fuente
fuente
Respuestas:
Si establece
LD_PRELOAD
la ruta de un objeto compartido, ese archivo se cargará antes que cualquier otra biblioteca (incluido el tiempo de ejecución Clibc.so
). Entonces, para ejecutarls
con sumalloc()
implementación especial , haga esto:fuente
LD_PRELOAD
. La razón es que, al ser una variable de entorno, la heredan los procesos secundarios, que pueden tener un directorio de trabajo diferente al proceso principal. Por lo tanto, cualquier ruta relativa no podría localizar la biblioteca para precargarla.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.fuente
Con
LD_PRELOAD
usted puede dar prioridad a las bibliotecas.Por ejemplo, puede escribir una biblioteca que implemente
malloc
yfree
. Y al cargar estos conLD_PRELOAD
sumalloc
yfree
se ejecutará en lugar de los estándar.fuente
calloc
? ¿No lo estropearía todo?malloc
y gratis están específicamente diseñados en glibc para permitir esto y el stockcalloc
logra llamar a su importadomalloc
. No intente esto con ninguna otra función. No funcionará tan bien.Como muchas personas mencionaron, usar
LD_PRELOAD
para precargar la biblioteca. Por cierto, puede VERIFICAR si la configuración está disponible porldd
comando.Ejemplo: suponga que necesita precargar el suyo
libselinux.so.1
.Por lo tanto, configure su entorno de precarga:
Verifique su biblioteca nuevamente:
fuente
LD_PRELOAD
enumera las bibliotecas compartidas con funciones que anulan el conjunto estándar, tal como lo/etc/ld.so.preload
hace. Estos son implementados por el cargador/lib/ld-linux.so
. Si desea anular solo algunas funciones seleccionadas, puede hacerlo creando un archivo de objeto y configurandoLD_PRELOAD
; las funciones en este archivo de objeto anularán solo aquellas funciones dejando a otras como estaban.Para obtener más información sobre las bibliotecas compartidas, visite http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
fuente
Aquí hay una publicación de blog detallada sobre la precarga:
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
fuente
es fácil exportar
mylib.so
a env:deshabilitar :
fuente
unset LD_PRELOAD
cuando se utiliza LD_PRELOAD, ese archivo se cargará antes que cualquier otra
$export LD_PRELOAD=/path/lib
lib para cargarse previamente, incluso esto también se puede usar en programasfuente
Usando la
LD_PRELOAD
ruta, puede forzar al cargador de aplicaciones a cargar el objeto compartido proporcionado, por encima del valor predeterminado proporcionado.Los desarrolladores usan esto para depurar sus aplicaciones al proporcionar diferentes versiones de los objetos compartidos.
Lo hemos usado para hackear ciertas aplicaciones, anulando las funciones existentes usando objetos compartidos preparados.
fuente