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

推荐订阅源

腾讯CDC
GbyAI
GbyAI
C
CERT Recently Published Vulnerability Notes
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
S
Securelist
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
Latest news
Latest news
T
Tor Project blog
T
Threat Research - Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V2EX - 技术
V2EX - 技术
L
Lohrmann on Cybersecurity
Google Online Security Blog
Google Online Security Blog
Cyberwarzone
Cyberwarzone
Help Net Security
Help Net Security
The Last Watchdog
The Last Watchdog
C
Cybersecurity and Infrastructure Security Agency CISA
Attack and Defense Labs
Attack and Defense Labs
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
H
Heimdal Security Blog
O
OpenAI News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
AI
AI
H
Hacker News: Front Page
博客园_首页
博客园 - 【当耐特】
L
LINUX DO - 最新话题
MyScale Blog
MyScale Blog
量子位
Vercel News
Vercel News
C
Cisco Blogs
L
LINUX DO - 热门话题
Y
Y Combinator Blog
T
Threatpost
爱范儿
爱范儿
P
Privacy & Cybersecurity Law Blog

博客园 - PKICA

博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 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底层设计理念值得注意的几个地方总结 rust可变引用作为函数参数的机理详解 Rust内存重解释transmute C与Rust类型映射 Rust FFI 安全抽象范式 rust延迟初始化原语 rust重借用机制与原理 rust参数传递模型 汇编语言语法详解 gdb汇编调试 gdb调试插件gef C语言thread_local linux系统readelf命令使用指南 gcore转储进程内存 gdb查看命令 RGB与YUV颜色编码的区别 Rust原子类型 C++ STL求两个集合交集差集 gdb调试集锦 ubuntu24.0.4使用root用户登录 ubuntu24.0.4输入密码后跳回登录界面 AI内存压缩技术TurboQuant及存疑 ubuntu切换到指定内核版本 在没有顶级科技大佬直接背书的情况下deepseek为啥能够异军突起? HuggingFace和deepseek的关系 当前主流AI大模型 Rust写时克隆Cow系列2
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