【问题标题】:Failed in using LD_PRELOAD to hook mmap system call in qemu(through libvirt)使用 LD_PRELOAD 在 qemu 中挂接 mmap 系统调用失败(通过 libvirt)
【发布时间】:2022-01-06 11:09:15
【问题描述】:

我想在 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

【问题讨论】:

  • 为什么路径中有 /?
  • / 是一个奇怪的地方放图书馆。
  • '/'是根路径(可能是父目录权限的问题...)。通过使用 LD_PRELOAD=/glibcHookMMAP.so qemu-system-x86_64 ...(args),它可以工作了!我认为不是目标。

标签: linux virtualization qemu libvirt


【解决方案1】:

好的,现在我知道了解决方案:Ubuntu 中的 Apparmor 策略限制了工作,就像 SELinux。因此我应该修改 /etc/apparmor.d/abstractions/libvirt-qemu 中的配置以允许 libvirt 链接 .so。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2011-10-21
  • 2015-01-02
  • 2015-09-18
  • 1970-01-01
  • 2018-07-24
  • 2015-02-21
相关资源
最近更新 更多