es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al utilizar LD_PRELOAD para enganchar la llamada al sistema mmap en qemu (a través de libvirt)

Quiero enganchar la llamada al sistema mmap en qemu, y uso libvirt para pasar el argumento de entorno de esta manera:

<qemu:commandline>
<qemu:env name='LD_PRELOAD' value='/glibcHookMMAP.so'/>
</qemu:commandline>

¡Pero falló! ¡Casi no puedo descubrir cuál es el problema! El registro en libvirt es así:

ERROR: ld.so: object '/glibcHookMMAP.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

En primer lugar, creo que es un problema de autoridad. Pero el archivo glibcHookMMAP.so se ha ejecutado con el comando chmod 777.

Entorno:

Ubuntu 18.04.2 Linux 5.4.0-92

libvirt 4.0.0

qemu 2.11.1

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que la variable de entorno LD_PRELOAD no está funcionando correctamente. Una posible solución es intentar especificar la ruta completa del archivo de objeto compartido en el atributo de valor del elemento qemu:env. Por ejemplo, si el archivo glibcHookMMAP.so está ubicado en el directorio /home/user, la línea de comandos debería lucir así:

    <qemu:commandline> 
      <qemu:env name='LD_PRELOAD' value='/home/user/glibcHookMMAP.so'></qemu:env> 
    </qemu:commandline> 
    

    Otra cosa a revisar es si el archivo de objeto compartido ha sido compilado para la arquitectura correcta. Si las arquitecturas del host y del invitado son diferentes, es posible que el archivo de objeto compartido no funcione. Además, asegúrese de que el archivo glibcHookMMAP.so se encuentre en una ubicación accesible por el proceso de QEMU.

    Si estos pasos no resuelven el problema, es posible que se requiera una depuración adicional. Esto puede implicar examinar los registros del sistema o utilizar herramientas de depuración como gdb o strace para solucionar el problema.

Comments are closed.