如何使用 LD_PRELOAD 运行 gdb?
我有一个使用 LD_PRELOAD 的程序。该程序应该像这样运行 这个,“LD_PRELOAD=/path/to/libfoo.so qemu -U LD_PRELOAD a.out”,如果 没有 gdb。
这是我在运行 gdb 时所做的事情。
(gdb) 设置环境 LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so
(gdb) 文件 /nfs_home/chenwj/tools/bin/qemu-i386
< code>(gdb) r -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1
但是 gdb 给了我下面的错误
正在启动程序:/nfs_home/chenwj/tools/bin/qemu- i386 -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1
bash:打开“/bin/bash”失败:权限被拒绝
启动过程中程序退出并显示代码66.
任何建议表示赞赏。
问候,陈维杰
I have a program using LD_PRELOAD. The program should be run like
this, "LD_PRELOAD=/path/to/libfoo.so qemu -U LD_PRELOAD a.out", if
without gdb.
Here are what I did while running 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
But gdb gave me the error below
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.
Any sugguestion appreciated.
Regards, chenwj
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
GDB
不会直接调用您的可执行文件。相反,它这样做是为了让 bash 负责 I/O 重定向(您没有使用它)。
我的猜测是,当 LD_PRELOAD=libdbo.so 生效时,
/bin/bash
不起作用,尽管我不明白失败的确切性质。解决此问题的一种方法是创建一个包装器可执行文件,实现与此等效的
C
:并调试该可执行文件(不设置
LD_PRELOAD
)。当包装器execve()
是包装的qemu-i386
时,您会看到一个额外的SIGTRAP
,您应该忽略它并继续
。GDB
does not invoke your executable directly. Instead, it doesThis is done so that bash takes care of I/O redirection (which you are not using).
My guess is that
/bin/bash
doesn't work when LD_PRELOAD=libdbo.so is in effect, though I don't understand the exact nature of failure.One way to work around this problem is to create a wrapper executable, implementing
C
equivalent of this:and debug that executable (without setting
LD_PRELOAD
). You'll see an extraSIGTRAP
when the wrapperexecve()
s the wrappedqemu-i386
, which you should ignore andcontinue
.