无法使用 LD_PRELOAD 挂钩 qemu 中的 mmap 系统调用(通过 libvirt)
Failed in using LD_PRELOAD to hook mmap system call in qemu(through libvirt)
我想在 qemu 中挂接 mmap 系统调用,我使用 libvirt 传递环境参数,如下所示:
<qemu:commandline>
<qemu:env name='LD_PRELOAD' value='/glibcHookMMAP.so'/>
</qemu:commandline>
但是失败了!我很难找出是怎么回事!像这样登录libvirt:
ERROR: ld.so: object '/glibcHookMMAP.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
首先,我觉得是权限的问题。但是文件 glibcHookMMAP.so 已经用命令 chmod 777
.
完成了
环境:
Ubuntu 18.04.2 Linux 5.4.0-92
libvirt 4.0.0
qemu 2.11.1
OK,现在我知道解决方案了:Ubuntu 中的 Apparmor 策略限制了工作,就像 SELinux。因此我应该修改 /etc/apparmor.d/abstractions/libvirt-qemu 中的配置以允许 libvirt link .so.
我想在 qemu 中挂接 mmap 系统调用,我使用 libvirt 传递环境参数,如下所示:
<qemu:commandline>
<qemu:env name='LD_PRELOAD' value='/glibcHookMMAP.so'/>
</qemu:commandline>
但是失败了!我很难找出是怎么回事!像这样登录libvirt:
ERROR: ld.so: object '/glibcHookMMAP.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
首先,我觉得是权限的问题。但是文件 glibcHookMMAP.so 已经用命令 chmod 777
.
环境:
Ubuntu 18.04.2 Linux 5.4.0-92
libvirt 4.0.0
qemu 2.11.1
OK,现在我知道解决方案了:Ubuntu 中的 Apparmor 策略限制了工作,就像 SELinux。因此我应该修改 /etc/apparmor.d/abstractions/libvirt-qemu 中的配置以允许 libvirt link .so.