Как запустить GDB с LD_PRELOAD? - PullRequest
       11

Как запустить GDB с LD_PRELOAD?

14 голосов
/ 16 января 2011

У меня есть программа, использующая LD_PRELOAD. Программа должна быть запущена как это "LD_PRELOAD = / путь / к / libfoo.so qemu -U LD_PRELOAD a.out", если без GDB.

Вот что я сделал, запустив 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

Но GDB дал мне ошибку ниже

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.

Любое предложение приветствуется.

С уважением, chenwj

1 Ответ

7 голосов
/ 17 января 2011

GDB не вызывает ваш исполняемый файл напрямую. Вместо этого он делает

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

Это сделано для того, чтобы bash позаботился о перенаправлении ввода / вывода (которое вы не используете).

Я предполагаю, что /bin/bash не работает, когда действует LD_PRELOAD = libdbo.so, хотя я не понимаю точную природу ошибки.

Один из способов обойти эту проблему - создать исполняемый файл оболочки, реализующий C эквивалент этого:

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

и отладить этот исполняемый файл (без установки LD_PRELOAD). Вы увидите дополнительный SIGTRAP, когда оболочка execve() обернута qemu-i386, которую следует игнорировать и continue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...