On Thu, Jan 06, 2022 at 07:44:25PM +0800, Xiong¡£ wrote:
> Dear sir:
>     I want to hook mmap system call in qemu, and I use
> libvirt to passthrough the environment argument like this:
>  <qemu:commandline>
>    <qemu:env name='LD_PRELOAD' value='/glibcHookMMAP.so'/>
>  </qemu:commandline>
> But it failed. I can hardly find out what is the matter!
> The log in libvirt like this:ERROR: ld.so: object
> '/glibcHookMMAP.so' from LD_PRELOAD cannot be preloaded
> (cannot open shared object file): ignored.    Firstly,
> I think it's the problem of authority. But the file
> glibcHookMMAP.so has been done with command `chmod 777`.
> My environment is as follows: Ubuntu 18.04.2 Linux
> 5.4.0-92 libvirt 4.0.0 qemu 2.11.1

On Thu, Jan 06, 2022 at 09:47:25PM +0800, Daniel P. Berrang¨¦¡£ wrote:
> Aside from normal file permissions, the other likely problem on Ubuntu
> will be AppArmor policy. It likely won't allow QEMU to load files from
> the / directory - if you put your .so in /usr/local/lib it might
> work.

I have a try, but it does not work and makes the same warning:
ld.so: object '/usr/local/lib/glibcHookMMAP.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
However, I use qemu command directly and it works. Command is like this:
sudo LD_PRELOAD=/usr/local/lib/glibcHookMMAP.so qemu-system-x86_64 -enable-kvm ...(other args).
After that, I get print information with my hook program. And I think the problem is in passing the environment args in libvirt.