惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
量子位
S
SegmentFault 最新的问题
V
Visual Studio Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
D
Docker
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
V
V2EX

博客园 - PKICA

单片机 MCU,嵌入式,MPU,DSP,FPGA,PLC 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 rust线程-std::thread::park和unpark 配合Builder实现轻量级的线程挂起与唤醒 rust自定义线程属性std::thread::Builder rust线程 rust关联函数 rust高并发设计实践进阶 rust高并发设计实践 rust性能优化与安全边界 联合体union在rust和C语言中有什么区别 rust并发与异步编程 如何预防rust不良的代码设计总结 rust类型系统与零成本抽象 rust内存模型 告别大显存依赖!用 Rust 新一代深度学习框架 Burn 打造纯 CPU 文本分类推理引擎 rust类型系统标记 编译配置解答 git实用命令 rust底层设计理念值得注意的几个地方总结
gdb-pwndbg的安装与使用指南
PKICA · 2026-04-15 · via 博客园 - PKICA

pwndbg 是一款专为漏洞利用(Pwn)和逆向工程设计的 GDB 插件。相比于 GEF,它在堆(Heap)分析、QEMU 模拟支持以及与 Ghidra 等反编译器的集成方面更具优势。

一、 安装指南

pwndbg 建议安装在 Ubuntu 或 Debian 等 Linux 发行版上。它通过克隆 GitHub 仓库并运行安装脚本来自动配置依赖项(如 Python 虚拟环境和必要的库)。

  • 克隆仓库:
    git clone https://github.com/pwndbg/pwndbg
    cd pwndbg
    
  • 执行安装脚本:
    ./setup.sh   #务必检查脚本中更新你系统软件的命令,以免引起系统兼容性问题
    注:脚本会自动修改你的 ~/.gdbinit 文件以加载插件。

   建议注释掉更新命令,以免引起gdb软件不兼容问题。包括含有“update”和“install”行的命令。

安装完成后,在全局或者用户环境中添加“export PWNDBG_NO_AUTOUPDATE=1”,以免自动更新软件

  • 配置文件:安装程序会自动在你的 ~/.gdbinit 中添加 source /path/to/pwndbg/gdbinit.py。(后续配置独立脚本,删除该行即可。)
  • 移动pwndbg文件:安装完成后,mv pwndbg $HOME/.pwndbg
  • 验证安装:
    启动 GDB:gdb。如果启动界面显示 pwndbg 字样且提示符变为 pwndbg>,则表示成功。

二、 核心使用指南

pwndbg 的主要优势在于其高度可视化的 Context(上下文) 视图,每当程序停止时,它会自动刷新以下面板:

  • REGISTERS:显示 CPU 寄存器及其指向的内容(支持指针追踪/Telescoping)。
  • DISASM:显示当前执行指令及其前后代码。
  • STACK:显示栈顶内容及详细的内存分布。
  • BACKTRACE:显示函数调用链。

1. 基础调试命令

这些命令是 GDB 的增强版,更符合二进制漏洞分析的习惯:

  • start:在 main 函数处自动停下(非常实用)。
  • b [address/function]:下断点(如 b *0x4005d1)。
  • c (continue):继续执行。
  • n (next) / ni (nexti):单步跳过(源码级/汇编级)。
  • s (step) / si (stepi):单步步入(源码级/汇编级)。

2. Pwn 专用高级功能

  • 内存查看:vmmap 查看程序的内存布局(堆栈权限、加载基址等)。
  • 安全检查:checksec 快速检查二进制文件的保护机制(NX, PIE, Canary, ASLR)。
  • 堆分析(pwndbg 强项):
    • heap:列出堆块(chunks)。
    • bins:查看 fastbins, unsorted bins 等各类堆桶。
    • visualize:以色彩丰富的图形化方式展示堆布局。
  • 溢出偏移计算:
    • cyclic [length]:生成特征字符串。
    • cyclic -l [value]:在程序崩溃后,通过崩溃地址快速计算偏移量。

三、 插件切换小贴士

如果你同时安装了 PEDAGEFpwndbg,可以在 ~/.gdbinit 中使用 define 语法来创建切换开关。例如,创建一个 init-pwndbg 命令,这样你就可以在启动 GDB 时通过执行该命令来手动激活 pwndbg,而不是默认加载。参考:gdb调试插件gef

当然,经过尝试,可以使用比较简单的配置:

1). 修改脚本 /usr/bin/gdb-gef

将脚本改为手动解析参数的模式。这种写法可以确保:先加载插件,后挂载进程

#!/bin/bash
exec gdb -q -ex init-pwndbg "$@"

2). 检查 /etc/gdb/gdbinit 配置

确保你的 define 块指向的是绝对路径,这样最稳妥:

define init-pwndbg
    source $HOME/.pwndbg/gdbinit.py
end
document init-pwndbg
    Initializes PwnDBG
end

参考资料:

Pwndbg + GEF + Peda — One for all, and all for one

gdb调试插件gef