gpt4 book ai didi

gdb - 如何使用 LD_PRELOAD 运行 gdb?

转载 作者:行者123 更新时间:2023-12-03 22:37:00 33 4
gpt4 key购买 nike

我有一个使用 LD_PRELOAD 的程序。该程序应该像
这个,“LD_PRELOAD=/path/to/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 1bash: open "/bin/bash" failed: Permission deniedDuring startup program exited with code 66.
任何建议表示赞赏。

问候, chenwj

最佳答案

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.so 生效时不起作用,尽管我不明白失败的确切性质。

解决此问题的一种方法是创建一个包装器可执行文件,实现 C相当于:
export LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so
exec /nfs_home/chenwj/tools/bin/qemu-i386 "$@"

并调试该可执行文件(不设置 LD_PRELOAD )。你会看到一个额外的 SIGTRAP当 wrapper execve() s 包裹 qemu-i386 ,您应该忽略它和 continue .

关于gdb - 如何使用 LD_PRELOAD 运行 gdb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703763/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com