pwndbg常用命令
一、基础调试命令(继承 GDB 核心,增强体验)
Pwndbg 兼容大部分 GDB 基础命令,且优化了输出格式(如高亮指令、显示寄存器值),核心基础命令如下:
| 命令 | 功能说明 |
|---|---|
run/r [args] |
启动程序(可带命令行参数),支持 r < payload 直接输入 payload。 |
start |
程序启动后停在 main 函数入口(比 run 更适合快速定位主逻辑)。 |
continue/c |
继续运行程序,直到下一个断点或程序结束。 |
next/n |
单步执行(跳过函数调用,“逐行” 执行)。 |
step/s |
单步执行(进入函数调用,“逐指令” 执行,适合跟踪子函数逻辑)。 |
finish |
执行完当前函数并返回上一层(退出当前函数上下文)。 |
until/u [addr] |
运行到指定地址 / 当前函数结束(避免逐步执行循环,直接跳至目标位置)。 |
break/b [addr/sym] |
设置断点(支持地址 b 0x401000、函数名 b main、符号 b printf)。 |
tbreak/tb [addr] |
临时断点(触发一次后自动删除)。 |
delete/d [num] |
删除断点(d 删所有,d 1 删编号为 1 的断点)。 |
disable/enable [num] |
禁用 / 启用断点(保留断点不删除,仅控制是否生效)。 |
info breakpoints/ib |
查看所有断点信息(编号、地址、触发次数)。 |
backtrace/bt |
查看函数调用栈(高亮当前帧,显示函数名 + 地址 + 参数,比 GDB 更清晰)。 |
frame/f [num] |
切换到调用栈的第 num 帧(如 f 0 是当前帧,f 1 是上一层调用帧)。 |
quit/q |
退出 Pwndbg。 |
二、内存与寄存器分析(核心调试功能)
漏洞挖掘中频繁需要查看内存、寄存器状态,Pwndbg 提供了简洁高效的命令:
1. 寄存器操作
| 命令 | 功能说明 |
|---|---|
reg |
显示所有通用寄存器(rax、rbx、rip 等)+ 标志位(eflags),高亮修改后的值。 |
reg <reg> |
查看单个寄存器(如 reg rax、reg rip)。 |
reg set <reg> <val> |
修改寄存器值(如 reg set rip 0x401234,强制跳至目标地址)。 |
pc |
快速查看当前指令地址(rip 寄存器值,等价于 reg rip)。 |
2. 内存查看
| 命令 | 功能说明 |
|---|---|
x/<n><f><u> addr |
查看内存(GDB 原生命令,Pwndbg 优化输出格式): - n:查看个数;- f:格式(x十六进制、d十进制、s字符串、i指令);- u:单位(b字节、h半字、w字、g双字);示例: x/10s 0x404000(查看 10 个字符串)、x/5i $rip(查看当前位置后 5 条指令)。 |
p/x <var> |
打印变量 / 表达式(x十六进制、d十进制、s字符串),示例:p/x global_var、p (char*)0x404000。 |
search <val> |
在内存中搜索值(支持字符串、十六进制、十进制),示例:search "flag"(搜字符串)、search 0xdeadbeef(搜十六进制值)、search -x 0x1234(强制按十六进制搜)。 |
vmmap |
查看进程内存布局(权限、地址范围、映射区域,核心命令!),示例:vmmap libc(只看 libc 映射)、vmmap heap(只看堆区域)。 |
heap |
查看堆结构(快速了解堆块分布),heap chunks 显示所有堆块详细信息(大小、状态、fd/bk 指针)。 |
xinfo <addr> |
查看地址所属的内存区域(权限、映射类型,补充 vmmap 细节),示例:xinfo 0x7f0000000000。 |
三、堆调试专项(堆溢出 / Use After Free 必备)
Pwndbg 内置堆调试工具,无需手动解析堆结构,直接可视化堆状态:
| 命令 | 功能说明 |
|---|---|
heap |
概览堆布局(当前堆顶、堆大小、主要堆块)。 |
heap chunks |
详细列出所有堆块(地址、大小、状态:inuse/free、fd/bk 指针、prev_size)。 |
heap bins |
查看堆的空闲链表(fastbins、smallbins、largebins),显示每个 bin 中的堆块。 |
heap bin <idx> |
查看指定 bin 的详细信息(如 heap bin fastbins 看 fastbin,heap bin smallbins 5 看 smallbin 第 5 个)。 |
malloc_chunk <addr> |
解析指定地址的堆块结构(单独查看某个堆块的详细信息,如 malloc_chunk 0x5555555592a0)。 |
tcache |
查看 tcache 链表(glibc 2.26+ 新增,堆漏洞常用),显示每个 tcache bin 的堆块数量和地址。 |
tcache bins <idx> |
查看指定 tcache bin 的详细堆块(如 tcache bins 0 看大小为 0x20 的 tcache bin)。 |
四、ROP 与漏洞利用辅助(快速构造利用链)
Pwndbg 整合了 ROPgadget 功能,无需额外工具即可查找 ROP gadgets、解析函数地址:
| 命令 | 功能说明 |
|---|---|
ropgadget [opts] |
查找 ROP gadgets(默认搜索所有,支持过滤): - ropgadget --binary /bin/sh(指定二进制);- ropgadget --string "/bin/sh"(搜字符串 gadget);- ropgadget --only "pop rdi; ret"(只搜指定指令序列);示例: ropgadget --only "pop rsi; pop r15; ret"(查找 RSI 寄存器赋值的 gadget)。 |
got |
查看 GOT 表(全局偏移表),显示函数名、GOT 地址、当前值(是否已延迟绑定),示例:got printf(只看 printf 的 GOT 条目)。 |
plt |
查看 PLT 表(过程链接表),显示函数名、PLT 地址,示例:plt system(快速获取 system 函数的 PLT 地址)。 |
libc |
查看 libc 相关信息(基地址、版本、函数地址),示例:libc base(获取 libc 基地址);libc addr system(获取 system 函数在 libc 中的偏移,结合基地址计算实际地址);libc search "bin/sh"(查找 libc 中 /bin/sh 字符串的地址)。 |
leak <addr> |
解析地址对应的符号(如 leak 0x7f0000040123,自动显示该地址属于 libc 的哪个函数 / 偏移)。 |
pattern |
生成 / 搜索 cyclic 模式(用于栈溢出时计算偏移量,核心功能!): - pattern create 200(生成 200 字节的 cyclic 字符串);- pattern offset <val>(根据崩溃时的栈值计算偏移,如 pattern offset 0x61616161)。 |
五、其他实用命令(提升调试效率)
| 命令 | 功能说明 |
|---|---|
context |
显示当前调试上下文(寄存器、当前指令、调用栈、内存布局),一键概览所有关键信息(最常用辅助命令!)。 |
context reg |
单独显示寄存器上下文(精简版 context)。 |
context code |
单独显示当前指令上下文(高亮当前指令,前后各 5 条)。 |
context stack |
单独显示栈上下文(当前栈帧的内存内容,便于查看栈上数据)。 |
aslr |
查看 / 设置 ASLR 状态(aslr on/off,调试时关闭 ASLR 方便固定地址)。 |
set follow-fork-mode child |
调试多进程程序时,跟踪子进程(默认跟踪父进程)。 |
shell <cmd> |
在 Pwndbg 中执行系统命令(无需退出调试器),示例:shell ls、shell cat payload.txt。 |
save <file> |
保存当前调试会话(断点、寄存器状态等),后续用 source <file> 恢复。 |
六、常用快捷键
Tab:自动补全命令 / 地址 / 符号(极大提升效率);Ctrl + c:中断程序运行(触发断点);Ctrl + d:等价于quit,退出 Pwndbg;- 上下箭头:查看历史命令(无需重复输入)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Sy-Blog!





