一、基础调试命令(继承 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 raxreg 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_varp (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 lsshell cat payload.txt
save <file> 保存当前调试会话(断点、寄存器状态等),后续用 source <file> 恢复。

六、常用快捷键

  • Tab:自动补全命令 / 地址 / 符号(极大提升效率);
  • Ctrl + c:中断程序运行(触发断点);
  • Ctrl + d:等价于 quit,退出 Pwndbg;
  • 上下箭头:查看历史命令(无需重复输入)。