Question

J'ai un programme à l'aide LD_PRELOAD. Le programme doit être exécuté comme cela, "LD_PRELOAD = / path / to / libfoo.so qemu -U LD_PRELOAD a.out", si sans gdb.

Voici ce que je faisais lors de l'exécution gdb.

(gdb) set environment LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so

(gdb) file /nfs_home/chenwj/tools/bin/qemu-i386

(gdb) r -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1

Mais gdb m'a donné l'erreur ci-dessous

Starting program: /nfs_home/chenwj/tools/bin/qemu-i386 -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1

bash: open "/bin/bash" failed: Permission denied

During startup program exited with code 66.

Tout sugguestion apprécié.

Cordialement, chenwj

Était-ce utile?

La solution

GDB ne Invoke votre exécutable directement. , Il ne place

bash -c '/nfs_home/chenwj/tools/bin/qemu-i386  -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1'

Ceci est fait pour que bash prend en charge la redirection d'E / S (que vous n'utilisez pas).

Je pense que /bin/bash ne fonctionne pas lorsque LD_PRELOAD = libdbo.so est en vigueur, bien que je ne comprends pas la nature exacte de l'échec.

Une façon de contourner ce problème est de créer un exécutable d'emballage, la mise en œuvre équivalent C de ceci:

export LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so
exec /nfs_home/chenwj/tools/bin/qemu-i386 "$@"

et débogage exécutable (sans paramètre LD_PRELOAD). Vous verrez un SIGTRAP supplémentaire lorsque l'emballage execve()s Le qemu-i386 enveloppé, que vous devez ignorer et continue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top