Как запустить gdb с предварительной загрузкой LD?
у меня есть программа, использующая LD_PRELOAD. Программа должна работать как это " LD_PRELOAD= / path/to / libfoo.Итак, QEMU-U LD_PRELOAD a.out", если без БГД.
вот что я сделал во время запуска 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.
любой sugguestion оценили.
С уважением, chenwj
1 ответов
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.то же самое происходит и в действительности, хотя я не понимаю точной природы неудачи.
один из способов обойти эту проблему-создать исполняемый файл оболочки, реализующий C
эквивалент это:
export LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so
exec /nfs_home/chenwj/tools/bin/qemu-i386 "$@"
и отлаживайте этот исполняемый файл (без установки LD_PRELOAD
). Вы увидите дополнительный SIGTRAP
когда фантик execve()
s завернутый qemu-i386
, который вы должны игнорировать и continue
.