Frage

habe ich ein Programm mit LD_PRELOAD. Das Programm sollte wie ausgeführt werden diese "LD_PRELOAD = / path / to / libfoo.so qemu -U LD_PRELOAD a.out", wenn ohne gdb.

Hier sind, was ich tat, während gdb läuft.

(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

Aber gdb gab mir den Fehler unter

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.

Jede sugguestion geschätzt.

Regards, chenwj

War es hilfreich?

Lösung

GDB nicht invoke ausführbare Datei direkt. Stattdessen es funktioniert

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

Dies geschieht so, dass bash Pflege I nimmt / O-Umleitung (die Sie nicht verwenden).

Meine Vermutung ist, dass /bin/bash funktioniert nicht, wenn LD_PRELOAD = libdbo.so in Kraft ist, wenn ich die genaue Art des Scheiterns nicht verstehen.

Ein Weg, um dieses Problem zu umgehen ist eine Wrapper ausführbar zu erstellen, Implementierung C äquivalent folgt aus:

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

und debuggen, dass ausführbare Datei (ohne Einstellung LD_PRELOAD). Sie erhalten eine zusätzliche SIGTRAP sehen, wenn die Wrapper execve()s der umhüllte qemu-i386, die Sie ignorieren sollten und continue.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top