5 votos

¿La exportación de DYLD_INSERT_LIBRARIES para libgmalloc no funciona en Big Sur?

He estado luchando con un problema muy extraño. Estoy tratando de usar libgmalloc (por ejemplo por man 3 libgmalloc ) en Big Sur (estoy en 11.3.1) para solucionar un problema de memoria en mi código. Sin embargo, no puedo establecer la variable de entorno DYLD_INSERT_LIBRARIES. Se establece como una variable de shell, pero no como una variable de entorno que pueda ser vista por los procesos hijos:

stuarts@iMac-Pro ~ % export DYLD_INSERT_LIBRARIES="/usr/lib/libgmalloc.dylib"
stuarts@iMac-Pro ~ % echo $DYLD_INSERT_LIBRARIES
/usr/lib/libgmalloc.dylib
stuarts@iMac-Pro ~ % env |grep DYLD_INSERT_LIBRARIES
stuarts@iMac-Pro ~ % 

La variable no aparece en el listado env (y tampoco es detectada por mi programa usando getenv()). Empecé a jugar con la configuración de otras variables de nombre aleatorio, y descubrí que puedo exportar "DYLD" y "A_B", pero no "DYLD_A" (u otras cosas que empiezan por "DYLD_").

Esto parece un filtro silencioso extremadamente extraño en la exportación.

¿Cómo se debe utilizar libgmalloc en Big Sur?

3voto

Sumod Puntos 907

Dadas las características de seguridad identificadas en la respuesta de @negacao, la inyección de libgmalloc vía variable de entorno es muy frágil (funciona directamente desde la línea de comandos, pero no funciona cuando se invoca a través de scripts, o dentro del depurador).

En su lugar, la construcción de la aplicación con -lgmalloc en el Makefile funcionó bien tanto desde la línea de comandos como en el depurador (como se indica en el comentario de @mmmmmm) y pude encontrar mi error en el depurador de esta manera.

Apple necesita actualizar la página man de libgmalloc.

2voto

negacao Puntos 123

En mi máquina (M1):

~$ export DYLD_INSERT_LIBRARIES=foo
~$ env | grep DYLD_INSERT_LIBRARIES
~$ /opt/homebrew/bin/bash
dyld: could not load inserted library 'foo' because image not found

Abort trap: 6

Así que (como has visto), la variable es que se está fijando - pero como env es un binario del sistema, se elimina silenciosamente. Probando con mi versión homebrew instalada de bash, se puede ver que el valor está realmente establecido.

Ver también esta respuesta de StackOverflow .

TL;DR funciona bien para los binarios que no son del sistema, se elimina silenciosamente del entorno para los binarios del sistema.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X