pwndbg

pwndbgMIT活跃维护 有专家点评

基于 GDB 和 LLDB 的调试插件,把内存查看、反汇编、堆分析和漏洞利用开发常用操作做得更顺手,适合 CTF 与逆向调试。

Exploit Development and Reverse Engineering with GDB & LLDB Made Easy

2026.10.28发布于 2026-10-28 22:03 UTC11,182star +18 / 7 天1,319fork同步于 2026-11-10 23:30 UTC

专家点评

上手难度:进阶更新于 2026-11-11

给 GDB/LLDB 补上逆向和 pwn 调试缺的那层命令与视图,替代 PEDA/GEF 这类单文件脚本

适用场景

  • CTF pwn 调试:需要在断点处直接看寄存器、栈、堆布局和内存映射,原生 GDB 要手敲一堆 x/i 命令,pwndbg 把这些压成一条 context
  • 漏洞利用开发迭代:反复改 payload、重跑、看崩溃点,需要稳定的 hexdump 和内存搜索,原生 GDB 的 x 命令在越界或非对齐地址上容易报错
  • 内核/嵌入式调试:qemu-system 起内核、qemu-user 跑单文件,需要同一套命令在用户态和内核态都成立,换 GEF 或 PEDA 在 qemu 场景下覆盖不全
  • 团队统一调试环境:多人共用一套 GDB 配置,模块化实现比单文件脚本好维护和裁剪,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 提炼,执行前请确认
README 未给出安装命令,仅指向 https://pwndbg.re/stable/setup
硬件要求按 README 说明

README 未说明硬件要求,仅给出软件版本:GDB 需 12.1+ 且 Python 3.10+,LLDB 需 19+ 且 Python 3.12+,qemu-user 需 QEMU 8.1+,qemu-system 需 QEMU 6.2+

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 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 未内联命令

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本2026.10.28
  1. 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-lldb 2026.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, hexdump and try-free commands.

    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-lldb
    

    Homebrew 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-lldb
    

    Nix 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-lldb
    

    Other 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-lldb failed to start with:

    pwndbg-lldb: line 3: .../pwndbg/bin/python3: No such file or directory
    

    The 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)
    • hexdump no longer hides the first line of a run of identical lines that comes right after exactly two identical lines (#4260)
    • try-free now checks the unsorted bin the same way glibc does, so it catches the free(): corrupted unsorted chunks case 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!

  2. 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 -o showing opcode bytes, Android Bionic detection and libc information, Objective-C class inspection (objc show-class and objc list-classes), better glibc heap discovery, Linux kernel 7.0 SLUB sheaf and barn inspection, a new setrlimit command to set debugee' resource limits, displaying SIMD registers with regs command 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-lldb
    

    Homebrew 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-lldb
    

    Nix 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-lldb
    

    Other 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, or nearpc -o 4 for a fixed four-byte column. This works per command, without changing nearpc-num-opcode-bytes (#4220).

    The nearpc <start> <end> now disassembles up to an end address. Use -r 0 to 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 regs command now decodes individual flags register flags (regs eflags; #4211) and can display SIMD registers, for example regs xmm0 (#4212).

    Android Bionic libc support

    Pwndbg now detects Bionic and resolves Android libc and loader mappings. It shows this with the libc (or libcinfo) command. This is a first step toward better Android debugging (#3988).

    Heap & Linux Kernel Debugging

    We improvec glibc heap discovery co

  3. 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 and nearpc -f|--function working without debugging symbols; new stack-vis command to visualize stack frames (similarly to vis-heap-chunks); emulation working with x64 kernels; v2p, p2v and pageinfo commands 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-lldb
    

    Homebrew 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-lldb
    

    Nix 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-lldb
    

    Other options:


    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 nearpc you no longer need to guess addresses to go backwards)

    • The nearpc -f|--function now 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 (ret etc.) 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-vis command

    The stack-vis command can now be used to visualize the stack frames of current thread in a similar fashion as vis-heap-chunks can be used for heap chunks (#3994)

    Linux kernel debugging

    • The v2p, p2v and pageinfo commands 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
  4. 2026.07.292026-07-30 · 2026-07-30 16:31 UTC
    查看更新说明

    This release brings: exithandlers command 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 richer procinfo output (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-lldb
    

    Homebrew 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-lldb
    

    Nix 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-lldb
    

    Other options:


    What's changed

    Breaking Changes

    • The mallocng-*, jemalloc-* and knft-* commands are now subcommands - use mallocng dump, mallocng vis, jemalloc heap, jemalloc extent-info, knft list-tables etc. instead of the old dash-separated names (#3750)
    • cyclic output is now consistent with pwntools - the generated de Bruijn sequence matches pwn cyclic (#3801)
    • Developer API: pwndbg.aglib.disasm.arch was renamed to pwndbg.aglib.disasm.assistant (#3919)

    New: exithandlers

    Added the exithandlers command (alias exitfuncs) - lists the currently registered glibc exit handlers by walking __exit_funcs and tls_dtor_list, demangling the PTR_MANGLEd function pointers and printing the pointer_guard cookie. 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 task
    • kseccomp [pid] - display seccomp information of a user task
    • ksighand [pid] - display signal handlers of a task
    • knamespace [pid] - display namespaces of a task

    Other kernel improvements:

    • Added the percpu GDB function - to resolve per-CPU variables from print/break expressions (#3950)
    • Added v2p and p2v GDB 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/mem by default, which is much faster ([#3947](https://github
  5. 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 nearpc disassembly, new decompiler integration (supporting IDA, Binary Ninja, Ghidra and angr), stack variable annotations from debug info, new kernel debugging commands: kmem-trace for tracing allocations, kcurrent/kfile/pagewalk to 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.re to 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-lldb
    

    Homebrew 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-lldb
    

    Nix 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-lldb
    

    Other options:


    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 with pwndbg.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-pwndbg release and in portable releases. If you use your own system GDB, you can enable it manually by setting the DEBUGINFOD_URLS environment 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 nearpc output using Unicode characters, inspired by radare2. Enabled by default, disable with -n | -no-branch flag (#3361) Disassemble entire function - nearpc -f <funcname> can now display all instructions of a function at once (#3736)


用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    repository-open-graph

    pwndbg

    license Tests codecov.io Discord

    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 CaseSupported Debugger
    Debugging Linux binaries or ELF filesGDB, LLDB
    Debugging Mach-O binaries on macOSLLDB
    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

    FeatureSupported VersionNotes
    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-userQEMU 8.1+vFile API is needed for vmmap
    qemu-systemQEMU 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.