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.