GDB + pwndbg(Pwn 视角)
2026/5/29工具工具GDBpwndbg大约 1 分钟
GDB + pwndbg(Pwn 视角)
链接
本文聚焦 Pwn 题中的实战技巧。
Pwn 中 GDB 观察什么
- 程序在哪里崩溃
- 返回地址是否被覆盖
- 栈、堆、寄存器状态
- libc、栈、堆、程序基址
- ROP 链是否按预期执行
CTF 常用技巧
找溢出偏移
cyclic 200
run
cyclic -l 0x6161616cpwntools 中也可以生成:
from pwn import *
print(cyclic(200))
print(cyclic_find(0x6161616c))看保护和 PIE 基址
checksec
vmmap
piebase调试 ROP 链
b *main
run
x/40gx $rsp
ni如果程序在 system 或 movaps 附近崩溃,优先怀疑栈对齐。
堆分析技巧
看堆状态
heap
bins
vis_heap_chunks堆题先记录每次 malloc、free 后的 chunk 状态,不要只看最后崩溃点。
记录 malloc/free
在 malloc 和 free 处下断点:
b malloc
b free
commands
silent
printf "malloc(%#lx) = %p\n", $rdi, $rax
continue
end追踪 chunk 状态
# 分配后查看
heap --chunk <addr>
# 释放后查看
bins
# 查看 tcache
bins tcache堆题调试流程
1. 下断点在 malloc/free
2. 记录每次操作的参数和返回值
3. 查看 chunk 状态
4. 分析 use-after-free 或 double free
5. 构造利用链attach 远程服务
本地 Docker 或 socat 起服务后,可以找到进程再 attach:
ps aux | grep vuln
gdb -p <pid>Pwn 常见问题
本地能打,远程失败
检查 libc 版本、栈对齐、输入输出同步、换行、环境变量差异。
堆题看不到 chunk
1. 确认程序已经执行了 malloc
2. 检查 libc 版本
3. 尝试不同版本的 pwndbg
4. 使用 gdb-peda 或 gef 作为备选