pwntools调用gdb.attach时提示/sysdeps路径下glibc源文件缺失如何解决
解决方案
1. 解决glibc源码找不到的报错
该报错是因为系统glibc编译时的原始源码路径和你实际存放的路径不匹配,仅使用directory配置搜索路径无法解决相对路径匹配问题,需使用路径替换命令:
- 先手动attach一次目标进程,在GDB中执行
info source,查看报错文件对应的编译原始路径前缀 - 在GDB脚本中添加
set substitute-path [原始路径前缀] [实际glibc源码存放路径]替换路径映射,例如你当前的源码存放在/home/pentester/Downloads/glibc-2.32/,若编译原始前缀为/build/glibc-2.32/,则配置为:set substitute-path /build/glibc-2.32/ /home/pentester/Downloads/glibc-2.32/
2. 解决调试卡死、pwntools无反馈问题
当前配置有两处会导致同步异常:
- 不要在
gdb.attach传入的GDB脚本末尾添加continue命令:pwntools默认会等待GDB返回就绪信号,脚本直接执行continue会打断同步逻辑导致卡死,可在GDB窗口加载完成后手动执行continue - 添加
set detach-on-fork off配置:你设置了follow-fork-mode child跟踪子进程,若不关闭fork后自动detach父进程的配置,GDB会断开关联父进程的通信通道,导致pwntools失去响应
3. 修正测试代码笔误
示例代码最后一行的p.interactiv()存在拼写错误,正确写法为p.interactive(),该错误会导致脚本执行到此处直接异常退出,容易和调试问题混淆。
修正后的可用测试代码
from pwn import * # 可选:指定用tmux新开窗口加载GDB,避免默认终端通信异常 # context.terminal = ["tmux", "splitw", "-h"] p = process('bash') gdb.attach(p, ''' set substitute-path /build/glibc-2.32/ /home/pentester/Downloads/glibc-2.32/ set follow-fork-mode child set detach-on-fork off break execve ''') p.interactive()
内容的提问来源于stack exchange,提问作者0ok3rn3lp4n1co0
相关产品推荐
相关产品推荐

