如何使用 LD_PRELOAD 运行 gdb?

发布于 2024-10-12 12:53:36 字数 658 浏览 1 评论 0原文

我有一个使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

(り薆情海 2024-10-19 12:53:36

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 重定向(您没有使用它)。

我的猜测是,当 LD_PRELOAD=libdbo.so 生效时, /bin/bash 不起作用,尽管我不明白失败的确切性质。

解决此问题的一种方法是创建一个包装器可执行文件,实现与此等效的 C

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

并调试该可执行文件(不设置 LD_PRELOAD)。当包装器 execve() 是包装的 qemu-i386 时,您会看到一个额外的 SIGTRAP,您应该忽略它并继续

GDB does not invoke your executable directly. Instead, it does

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

This 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:

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

and debug that executable (without setting LD_PRELOAD). You'll see an extra SIGTRAP when the wrapper execve()s the wrapped qemu-i386, which you should ignore and continue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文