题
我有一个使用ld_preload的程序。如果没有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.
任何建议都赞赏。
问候,钦威
解决方案
GDB
不会直接调用您的可执行文件。相反,它确实
bash -c '/nfs_home/chenwj/tools/bin/qemu-i386 -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1'
这样做是为了使Bash负责I/O重定向(您没有使用)。
我的猜测是 /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()
包裹 qemu-i386
, ,您应该忽略和 continue
.
不隶属于 StackOverflow