- CTF pwn 调试:需要在断点处直接看寄存器、栈、堆布局和内存映射,原生 GDB 要手敲一堆 x/i 命令,pwndbg 把这些压成一条 context
- 漏洞利用开发迭代:反复改 payload、重跑、看崩溃点,需要稳定的 hexdump 和内存搜索,原生 GDB 的 x 命令在越界或非对齐地址上容易报错
- 内核/嵌入式调试:qemu-system 起内核、qemu-user 跑单文件,需要同一套命令在用户态和内核态都成立,换 GEF 或 PEDA 在 qemu 场景下覆盖不全
- 团队统一调试环境:多人共用一套 GDB 配置,模块化实现比单文件脚本好维护和裁剪,PEDA/GEF 改起来是直接动一个大文件
pwndbg
pwndbgMIT活跃维护 有专家点评基于 GDB 和 LLDB 的调试插件,把内存查看、反汇编、堆分析和漏洞利用开发常用操作做得更顺手,适合 CTF 与逆向调试。
Exploit Development and Reverse Engineering with GDB & LLDB Made Easy
专家点评
上手难度:进阶更新于 2026-11-11给 GDB/LLDB 补上逆向和 pwn 调试缺的那层命令与视图,替代 PEDA/GEF 这类单文件脚本
适用场景
踩坑
- LLDB 路径:README 自己标注仍是早期阶段,功能受限;如果你的工作流在 macOS 上靠 LLDB,撞上缺失命令或行为不一致是预期内的,别按 GDB 的体验去要求它
- 版本门槛卡得比想象中紧:GDB 12.1+ 且 Python 3.10+、LLDB 19+ 且 Python 3.12+,qemu-user 的 vmmap 还要 QEMU 8.1+ 的 vFile API;在发行版自带的老 GDB(比如 issue 里出现的 gdb-8.2)上会直接撞 Python 异常,得自己编译或换源
- 安装不在 README 里:官方把步骤放在 setup 页面,按 README clone 完不能直接跑;macOS 上还有 quarantine 属性相关的安装问题被单独提过
同类对比
GEF 和 PEDA 是直接竞品,单文件、依赖少、老 GDB 上更容易跑起来;如果你只需要最基础的增强且环境版本很旧,或者想改源码时不用理解模块结构,选它们更省事。
README 未给出安装命令,仅指向 https://pwndbg.re/stable/setupREADME 未说明硬件要求,仅给出软件版本:GDB 需 12.1+ 且 Python 3.10+,LLDB 需 19+ 且 Python 3.12+,qemu-user 需 QEMU 8.1+,qemu-system 需 QEMU 6.2+
项目说明
由 README 自动翻译提炼给 GDB 和 LLDB 加装调试增强的插件,让逆向与漏洞利用开发不再难用
基于 GDB 和 LLDB 的调试插件,把内存查看、反汇编、堆分析和漏洞利用开发常用操作做得更顺手,适合 CTF 与逆向调试。
核心能力
- 以 Python 模块形式加载进 GDB 或作为 LLDB 的 REPL 接口
- 提供原生调试器缺失的易用命令,如健壮的 hexdump
- 同时支持 GDB 与 LLDB,两者体验保持一致
- 覆盖 Linux 用户态、内核 qemu、嵌入式等多调试场景
- 以模块化实现替代 PEDA、GEF 等单文件脚本
容易踩的坑
LLDB 支持仍处早期阶段,可能存在 bug 或功能限制;qemu-user 的 vmmap 依赖 QEMU 8.1+ 的 vFile API;安装步骤需按官方 setup 页面操作,README 未内联命令
- 2026.10.28最新正式版2026-10-28 · 2026-10-28 22:03 UTC
This is a hotfix release for the 2026.10.22 release.
This release fixes Pwndbg for LLDB, which did not start at all in 2026.10.22 portable builds. If you installed
pwndbg-lldb2026.10.22 (via the install script, Homebrew, or the release packages and tarballs), please upgrade. Pwndbg for GDB was not affected.It also brings a few fixes to the
spray,hexdumpandtry-freecommands.Thanks to everyone who reported the issue and contributed!
Please sponsor us at Pwndbg so we can keep improving it! -- We can give you a talk about Pwndbg too!
Quick install
Install Pwndbg portable on Linux or macOS (choose one line for GDB or LLDB):
curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-gdb curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-lldbHomebrew package (macOS only; choose one line for GDB or LLDB):
brew install pwndbg/tap/pwndbg-gdb # only allows for remote debugging of ELFs brew install pwndbg/tap/pwndbg-lldbNix package manager (Linux/macOS; choose one line for GDB or LLDB):
nix shell github:pwndbg/pwndbg # this is pwndbg-gdb nix shell github:pwndbg/pwndbg#pwndbg-lldbOther options:
- For distro and architecture packages, see the setup docs and the release assets below.
- For the latest development version, install from source.
What's changed
LLDB regression fix
In 2026.10.22, the portable
pwndbg-lldbfailed to start with:pwndbg-lldb: line 3: .../pwndbg/bin/python3: No such file or directoryThe launcher script was changed to run
bin/python3(#4102), but that wrapper was only added to the GDB bundle and not to the LLDB one. The LLDB bundle now includes it too (#4268).Other fixes
spray <addr> <length> --value <value>now writes the value (truncated) when the length is shorter than the value; previously it wrote nothing (#4261)hexdumpno longer hides the first line of a run of identical lines that comes right after exactly two identical lines (#4260)try-freenow checks the unsorted bin the same way glibc does, so it catches thefree(): corrupted unsorted chunkscase instead of reporting "All checks passed!" (#4262)
Full Changelog: https://github.com/pwndbg/pwndbg/compare/2026.10.22...2026.10.28
Thanks also to our new contributor: @sindooo (#4268), who found and fixed the LLDB regression!
- 2026.10.222026-10-22 · 2026-10-22 11:26 UTC
查看更新说明
This release brings support for m68k architecture and unknown architectures, better C++ symbols, expression support and guides (debugging C++, symbol mangling, pretty printing),
nearpc -oshowing opcode bytes, Android Bionic detection and libc information, Objective-C class inspection (objc show-classandobjc list-classes), better glibc heap discovery, Linux kernel 7.0 SLUB sheaf and barn inspection, a newsetrlimitcommand to set debugee' resource limits, displaying SIMD registers withregscommand and more!Screenshots and details below. Thanks to everyone who contributed!
Please sponsor us at Pwndbg so we can keep improving it! -- We can give you a talk about Pwndbg too!
Quick install
Install Pwndbg portable on Linux or macOS (choose one line for GDB or LLDB):
curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-gdb curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-lldbHomebrew package (macOS only; choose one line for GDB or LLDB):
brew install pwndbg/tap/pwndbg-gdb # only allows for remote debugging of ELFs brew install pwndbg/tap/pwndbg-lldbNix package manager (Linux/macOS; choose one line for GDB or LLDB):
nix shell github:pwndbg/pwndbg # this is pwndbg-gdb nix shell github:pwndbg/pwndbg#pwndbg-lldbOther options:
- For distro and architecture packages, see the setup docs and the release assets below.
- For the latest development version, install from source.
What's changed
Architectures
Added m68k support including disassembly via Capstone and emulation of code via Unicorn engine. This includes branch target resolution and instruction annotations (#4225)
Pwndbg also no longer refuses to start on architectures it does not explicitly support. It falls back to the underlying debugger's disassembler, with reduced context functionality and no emulation (#4226).
Nearpc changes and regs
The
nearpc --opcode(or-o) now shows opcode bytes to fit the longest instruction in the listing, ornearpc -o 4for a fixed four-byte column. This works per command, without changingnearpc-num-opcode-bytes(#4220).The
nearpc <start> <end>now disassembles up to an end address. Use-r 0to omit the preceding instructions (#4176)Branch visualization now colors the full branch path and avoids misleading connections between separate address regions (#4182, #4175)
Regs command changes
The
regscommand now decodes individual flags register flags (regs eflags; #4211) and can display SIMD registers, for exampleregs xmm0(#4212).Android Bionic libc support
Pwndbg now detects Bionic and resolves Android libc and loader mappings. It shows this with the
libc(orlibcinfo) command. This is a first step toward better Android debugging (#3988).Heap & Linux Kernel Debugging
We improvec glibc heap discovery co
- 2026.09.152026-09-20 · 2026-09-20 12:08 UTC
查看更新说明
This release brings lots of disassembly improvements: backwards disassembly in context and
nearpc, better indirect jumps display andnearpc -f|--functionworking without debugging symbols; newstack-viscommand to visualize stack frames (similarly tovis-heap-chunks); emulation working with x64 kernels;v2p,p2vandpageinfocommands displaying full page info; LLDB and portable fixes; improved glibc 2.42-2.44 support and many other!See below for screenshots and more info!
Also, please sponsor the project to let us keep improving!
Thanks to everyone who made this possible!
Quick install
Install Pwndbg portable on Linux or macOS (choose one line for GDB or LLDB):
curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-gdb curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-lldbHomebrew package (macOS only; choose one line for GDB or LLDB):
brew install pwndbg/tap/pwndbg-gdb # only allows for remote debugging of ELFs brew install pwndbg/tap/pwndbg-lldbNix package manager (Linux/macOS; choose one line for GDB or LLDB):
nix shell github:pwndbg/pwndbg # this is pwndbg-gdb nix shell github:pwndbg/pwndbg#pwndbg-lldbOther options:
- Want specific distro and architecture package? Check out setup docs and download the specific asset below.
- Want latest development version? See install from source.
Dissasembly improvements
-
Pwndbg can now disassemble backwards, which makes lifes easier in many ways (in context disasm it gives info on the stuff before $PC when stopping at a breakpoint or right after a syscall, and in
nearpcyou no longer need to guess addresses to go backwards) -
The
nearpc -f|--functionnow works without debugging symbols. Finally, it now acts as a full replacement for GDB's/LLDB's disass command to disassemble a full function (is guaranteed to work in all cases the underlying command would work). Our disassembly adds all sorts of nice stuff (branch visualization, branch targets, showing strings and symbols of instruction operands, etc.) -
Indirect jumps are handled much better for x86 PLT. Return (
retetc.) instructions and memory-indirect jumps that can segfault are now also handled, visualizing segfaulting ROP chains.
- Emulation now works when debugging x64 kernels, so get more perks of our disassembly system (emulated flow of instructions, concrete instructions operands indicated)
New
stack-viscommandThe
stack-viscommand can now be used to visualize the stack frames of current thread in a similar fashion asvis-heap-chunkscan be used for heap chunks (#3994)Linux kernel debugging
- The
v2p,p2vandpageinfocommands now display full page info (vaddr, paddr, and page) (#4057)
Others
- Set defauly debuginfod server timeouts (#4079)
- Fixed Glibc >= 2.42 tcache handling (#4133), glibc 2.44 refilling of
AT_RANDOM(#4054), exithandlers command with glibc 2.44 (#4053), and tcache_max_bytes for glibc 2.42 (#4128) - Bumped versions of LLDB to 23 and Capstone to 8.0.0 (#4071, #4094)
- Fixed multiple bugs and cr
- 2026.07.292026-07-30 · 2026-07-30 16:31 UTC
查看更新说明
This release brings:
exithandlerscommand to inspect glibc exit handlers, Linux kernel task introspection without typeinfo (kstack,kseccomp,ksighand,knamespace), glibc 2.43 heap inspection improvements, heap tracker allocation call sites (track-heap --where), a much richerprocinfooutput (netlink info, socket or pipe peers), vmmap being cached on macOS, LLDB fixes and many other!See below for screenshots and more info!
Also, please sponsor the project to let us keep improving!
Thanks to everyone who made this possible!
Quick install
Install Pwndbg portable on Linux or macOS (choose one line for GDB or LLDB):
curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-gdb curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-lldbHomebrew package (macOS only; choose one line for GDB or LLDB):
brew install pwndbg/tap/pwndbg-gdb # only allows for remote debugging of ELFs brew install pwndbg/tap/pwndbg-lldbNix package manager (Linux/macOS; choose one line for GDB or LLDB):
nix shell github:pwndbg/pwndbg # this is pwndbg-gdb nix shell github:pwndbg/pwndbg#pwndbg-lldbOther options:
- Want specific distro and architecture package? Check out setup docs and download the specific asset below.
- Want latest development version? See install from source.
What's changed
Breaking Changes
- The
mallocng-*,jemalloc-*andknft-*commands are now subcommands - usemallocng dump,mallocng vis,jemalloc heap,jemalloc extent-info,knft list-tablesetc. instead of the old dash-separated names (#3750) cyclicoutput is now consistent with pwntools - the generated de Bruijn sequence matchespwn cyclic(#3801)- Developer API:
pwndbg.aglib.disasm.archwas renamed topwndbg.aglib.disasm.assistant(#3919)
New:
exithandlersAdded the
exithandlerscommand (aliasexitfuncs) - lists the currently registered glibc exit handlers by walking__exit_funcsandtls_dtor_list, demangling thePTR_MANGLEd function pointers and printing thepointer_guardcookie. Very handy when hijacking exit handlers during exploitation (#3973, alignment fixes in #3983)Linux Kernel Debugging
Full support for debugging kernel tasks without typeinfo - along with four new commands to introspect any kernel task (#3647):
kstack [pid]- display information about the stack of a taskkseccomp [pid]- display seccomp information of a user taskksighand [pid]- display signal handlers of a taskknamespace [pid]- display namespaces of a task
Other kernel improvements:
- Added the
percpuGDB function - to resolve per-CPU variables fromprint/breakexpressions (#3950) - Added
v2pandp2vGDB function helpers - to convert between virtual and physical addresses inside expressions (#3842) - Added support for breaking at the start of a JIT-compiled eBPF program (#3757)
- Page table scanning now reads
/proc/pid/memby default, which is much faster ([#3947](https://github
- 2026.02.182026-02-18 · 2026-02-18 14:54 UTC
查看更新说明
This is a hotfix release for the 2026.02.17 recent release.
This release brings A LOT: radare2-inspired branch visualization in
nearpcdisassembly, new decompiler integration (supporting IDA, Binary Ninja, Ghidra and angr), stack variable annotations from debug info, new kernel debugging commands:kmem-tracefor tracing allocations,kcurrent/kfile/pagewalkto dump kernel tasks info or memory pages information; LLDB core file support, new compact register display modes and many fixes and improvements.We also release:
- debuginfod client enabled by default in Pwndbg portable releases
- niche-elf, a fast library to build minimal ELFs with symbols, used in Pwndbg
The portable release also sets the
DEBUGINFOD_URLS=debuginfod.pwndbg.reto a debuginfod server we developed which contains debug symbols from multiple different mainstream distros (ubuntu, centos, nix, debian, fedora, opensuse, systemtap, archlinux and others). We will open source the server soon.Branch visualization showcase:
See What's changed below for more info. Big thanks to everyone who made this possible!
Also, please sponsor the project to let us keep improving!
Quick install
Install Pwndbg portable on Linux or macOS (choose one line for GDB or LLDB):
curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-gdb curl --proto '=https' --tlsv1.2 -LsSf 'https://install.pwndbg.re' | sh -s -- -t pwndbg-lldbHomebrew package (macOS only; choose one line for GDB or LLDB):
brew install pwndbg/tap/pwndbg-gdb # only allows for remote debugging of ELFs brew install pwndbg/tap/pwndbg-lldbNix package manager (Linux/macOS; choose one line for GDB or LLDB):
nix shell github:pwndbg/pwndbg # this is pwndbg-gdb nix shell github:pwndbg/pwndbg#pwndbg-lldbOther options:
- Want specific distro and architecture package? Check out setup docs and download the specific asset below.
- Want latest development version? See install from source.
What's changed
Breaking Changes
- Removed deprecated underscore command aliases (e.g.
heap_config->heap-config) (#3383) - Replaced all
pwndbg.aglib.regs["x"]bracket access withpwndbg.aglib.regs.read_reg("x")(#3440) - Dropped ppc64 big-endian portable release (#3424)
Debuginfod Server
We developed and open-sourced our own debuginfod server and host it at debuginfod.pwndbg.re. It is now enabled by default in our
gdb-for-pwndbgrelease and in portable releases. If you use your own system GDB, you can enable it manually by setting theDEBUGINFOD_URLSenvironment variable. This means debug symbols for system libraries are automatically fetched when available, making debugging significantly easier out of the box.Disassembly
Branch visualization - visualize branch sources and targets in
nearpcoutput using Unicode characters, inspired by radare2. Enabled by default, disable with-n | -no-branchflag (#3361) Disassemble entire function -nearpc -f <funcname>can now display all instructions of a function at once (#3736)
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
pwndbg
pwndbg (/paʊnˈdiˌbʌɡ/) is a GDB and LLDB plug-in that makes debugging suck less,
with a focus on features needed by low-level software developers, hardware hackers,
reverse-engineers and exploit developers.
It has a boatload of features, see our Features page and CHEATSHEET (feel free to print it!). If you have any questions you may read the documentation or asks us in our Discord server.
Want Pwndbg to keep moving fast, or, have us give a talk about it? Sponsor us!
Why?
Vanilla GDB and LLDB are terrible to use for reverse engineering and exploit development.
Typing x/30gx $rsp or navigating cumbersome LLDB commands is not fun and often provides
minimal information. The year is 2026, and core debuggers still lack many user-friendly
features such as a robust hexdump command. WinDbg users are completely lost when they
occasionally need to bump into GDB or LLDB.
Pwndbg is a Python module which can be loaded into GDB or run as a REPL interface for LLDB. It provides a suite of utilities and enhancements that fill the gaps left by these debuggers, smoothing out rough edges and making them more user-friendly.
Installation
See installation instructions.
What about ...?
Many past (gdbinit, PEDA) and present projects (GEF, bata24/GEF) offer great features, but are hard to extend and are packaged as large single files (103KB, 195KB, 423KB, 5.24MB). Pwndbg aims to replace them with a faster, cleaner, and more robust implementation.
When to Use GDB or LLDB?
Pwndbg supports both GDB and LLDB, and each debugger has its own strengths. Here's a quick guide to help you decide which one to use:
| Use Case | Supported Debugger |
|---|---|
| Debugging Linux binaries or ELF files | GDB, LLDB |
| Debugging Mach-O binaries on macOS | LLDB |
| Linux kernel debugging (qemu-system) | GDB, LLDB |
| Linux user-space emulation (qemu-user) | GDB |
| Embedded debugging (ARM Cortex M* or RISC-V/32) | GDB, LLDB |
Pwndbg ensures a consistent experience across both, so switching between them is seamless.
The LLDB implementation in pwndbg is still in early-stage and may contain bugs or limitations. Known issues are tracked in GitHub Issues.
If you encounter any problems, feel free to report them or discuss on our Discord server.
Compatibility Table
| Feature | Supported Version | Notes |
|---|---|---|
| pwndbg-gdb | - Python 3.10+ - GDB 12.1+ | Battle-tested on Ubuntu 22.04/24.04 |
| pwndbg-lldb | - Python 3.12+ - LLDB 19+ | Experimental/early-stage support |
| qemu-user | QEMU 8.1+ | vFile API is needed for vmmap |
| qemu-system | QEMU 6.2+ | Supported version since Ubuntu 22.04 |
Contributing
Pull requests are welcome ❤️. Check out the Contributing Guide.
Acknowledgements
Pwndbg was originally created by Zach Riggle, who is no longer with us. We want to thank Zach for all of his contributions to pwndbg and the wider security community.