ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Pwndbg 安装与配置完全指南:便携版、源码构建到 GDB/LLDB 全环境部署

Pwndbg 安装与配置完全指南:便携版、源码构建到 GDB/LLDB 全环境部署 Pwndbg 安装与配置完全指南便携版、源码构建到 GDB/LLDB 全环境部署【免费下载链接】pwndbgExploit Development and Reverse Engineering with GDB LLDB Made Easy项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbgPwndbg 是面向 GDB 与 LLDB 的 Exploit 开发与逆向工程增强插件。本文基于仓库 docs/setup.md 的官方安装文档系统梳理从官方便携二进制、uv源码安装、发行版软件包到手动解压的全部部署路径并结合仓库内 docs/install.sh、setup.sh、pyproject.toml 等源码说明各方法的底层实现与适用前提。读完本文你将能根据自身环境Linux/macOS、GDB/LLDB、是否具备 root 权限、磁盘空间与网络条件快速选型并完成一次可复现、可更新、可卸载的 Pwndbg 部署。安装方式总览先选型再动手Pwndbg 同时支持 GDB 与 LLDB 两种调试器后端覆盖 Linux 与 macOS。安装方式虽多但本质上分为三类类别代表方法交付产物适用场景便携二进制官方安装脚本、手动解压 portable 包独立的pwndbg/pwndbg-lldb程序新用户首选零依赖、随装随用源码安装uv tool install githttps://github.com/pwndbg/pwndbg通过 uv 管理的独立工具环境想跟随上游最新代码、或用系统自带 GDB/LLDB发行版打包RPM/DEB/Alpine/Arch、Homebrew、Nix由包管理器托管的系统命令融入既有系统管理流程非官方支持官方推荐新用户使用安装脚本方式获取pwndbg程序怀念经典做法的老用户则可以选择把 Pwndbg 以source形式挂到~/.gdbinit让每次启动gdb自动加载。无论选择哪种方式如果你要在pwntools脚本中调用 Pwndbg只需在脚本里设置context.gdb_binary pwndbg这样 pwntools 的gdb.debug()等接口就会以pwndbg作为 GDB 前端启动。方式一官方安装脚本推荐安装脚本会从官方 releases 拉取最新便携版portable release安装后你将得到一个可以直接像gdb一样使用的pwndbg程序。后续更新只需重新执行同一条安装命令即可。脚本本体对应仓库内的 docs/install.sh它负责完成检测操作系统与架构 → 选择对应文件名 → 下载.tar.xz→ 解压到安装目录 → 在 bin 目录建立符号链接。从源码可以看出它支持的架构映射Linuxx86_64 / i686 / aarch64 / armv7l / riscv64 / ppc64(le) / s390x / loongarch64macOSarm64 / x86_64pwndbg-gdbGDB 前端安装后提供pwndbg命令用法与gdb一致。系统级安装需 root脚本会自动调用 sudo curl/sh{.bash .copy} # (recommended) curl --proto https --tlsv1.2 -LsSf https://install.pwndbg.re | sh -s -- -t pwndbg-gdb GNU wget/sh{.bash .copy} wget --https-only --secure-protocolTLSv1_2 -qO- https://install.pwndbg.re | sh -s -- -t pwndbg-gdb BusyBox wget/sh{.bash .copy} wget -qO- https://install.pwndbg.re | sh -s -- -t pwndbg-gdb安装位置为/usr/local/lib/pwndbg-gdb程序实体与/usr/local/bin/pwndbg符号链接。卸载命令sudo rm -r /usr/local/lib/pwndbg-gdb /usr/local/bin/pwndbg用户级安装无需 root在命令末尾追加-u参数对应 docs/install.sh 中的ROOTLESStrue分支即跳过 sudo 逻辑改装到~/.local下 curl/sh{.bash .copy} curl --proto https --tlsv1.2 -LsSf https://install.pwndbg.re | sh -s -- -t pwndbg-gdb -u GNU wget/sh{.bash .copy} wget --https-only --secure-protocolTLSv1_2 -qO- https://install.pwndbg.re | sh -s -- -t pwndbg-gdb -u BusyBox wget/sh{.bash .copy} wget -qO- https://install.pwndbg.re | sh -s -- -t pwndbg-gdb -u用户级安装位置为~/.local/lib/pwndbg-gdb与~/.local/bin/pwndbg卸载rm -r ~/.local/lib/pwndbg-gdb ~/.local/bin/pwndbgpwndbg-lldbLLDB 前端安装后提供pwndbg-lldb ./your-binary命令用于在 LLDB 上获得同样完整的 Pwndbg 体验。系统级安装curl --proto https --tlsv1.2 -LsSf https://install.pwndbg.re | sh -s -- -t pwndbg-lldb卸载sudo rm -r /usr/local/lib/pwndbg-lldb /usr/local/bin/pwndbg-lldb用户级安装curl --proto https --tlsv1.2 -LsSf https://install.pwndbg.re | sh -s -- -t pwndbg-lldb -u卸载rm -r ~/.local/lib/pwndbg-lldb ~/.local/bin/pwndbg-lldb提示脚本支持-v version参数指定安装特定版本默认版本号写死在 docs/install.sh 的VERSION变量中在交互式终端中若不指定-t脚本也会引导你从pwndbg-gdb/pwndbg-lldb中二选一。方式二从源码安装uv 构建这种方式适合希望紧跟主分支代码、或在仓库基础上二次开发的用户。前置要求是安装uvPython 包与项目管理器以及 git 和 curl。最简单的全量安装一条命令即可它会同时交付pwndbg与pwndbg-lldb两个命令uv tool install githttps://github.com/pwndbg/pwndbg[gdb,lldb]其中[gdb,lldb]是可选依赖标签对应 pyproject.toml 中定义的gdb封装好的gdb-for-pwndbg与lldblldb-for-pwndbg两个 extras——默认情况 Pwndbg 会使用项目自带的、经过打包与补丁的最新版 GDB/LLDB保证后端版本与插件完全匹配。更新同样只需重跑该命令。使用系统自带的 GDB / LLDB如果你不想要项目内置的调试器后端而希望复用系统包管理器安装的 GDB / LLDB可以按如下方式安装前提是系统 GDB 与 LLDB 使用同一 Python 版本编译下文命令会自动探测该版本# Assuming that your LLDB and GDB are compiled with the same python version :) PY_VER$(gdb -nx --batch -iex py import sysconfig; print(sysconfig.get_config_var(VERSION))) uv tool install --python$PY_VER githttps://github.com/pwndbg/pwndbg这条命令的精髓在于先用gdb -nx --batch以批处理方式从 GDB 内置 Python 中读出sysconfig.get_config_var(VERSION)得到 GDB 编译期使用的 Python 版本号再把它传给uv tool install --python$PY_VER让 uv 创建与该版本完全一致的虚拟环境——这正是避免Python 版本不匹配类启动报错的关键。关于支持的 GDB / LLDB 版本范围以及从源码编译 GDB 的具体步骤详见 docs/contributing/setup-pwndbg-dev.md。简而言之Pwndbg 要求 GDB 12.1 及以上、LLDB 19 及以上。经典玩法系统 GDB ~/.gdbinit加载如果你怀念敲gdb即自动进入 Pwndbg的经典体验可以在上述基础上把 Pwndbg 挂进~/.gdbinitPY_VER$(gdb -nx --batch -iex py import sysconfig; print(sysconfig.get_config_var(VERSION))) uv tool install --python$PY_VER githttps://github.com/pwndbg/pwndbg echo source $(uv tool dir)/pwndbg/share/pwndbg/gdbinit.py ~/.gdbinituv tool dir会给出 uv 工具环境的根目录其中的share/pwndbg/gdbinit.py是打包时通过 pyproject.toml 的wheel.shared-data配置写入的gdbinit.py share/pwndbg/gdbinit.py与仓库根目录的 gdbinit.py 内容等价。如果你已经克隆了仓库到本地想直接用本地代码则把命令中的githttps://github.com/pwndbg/pwndbg替换成.当前目录并追加--editable参数这样对源码的修改会即时反映到安装中适合开发调试PY_VER$(gdb -nx --batch -iex py import sysconfig; print(sysconfig.get_config_var(VERSION))) uv tool install --editable --python$PY_VER . echo source $(uv tool dir)/pwndbg/share/pwndbg/gdbinit.py ~/.gdbinitLite 安装省掉非必需依赖若磁盘空间紧张可用--excludes剔除ziglang、decomp2dbg、ipython三个非必需依赖大约可节省 300 MB。以经典~/.gdbinit方式为例PY_VER$(gdb -nx --batch -iex py import sysconfig; print(sysconfig.get_config_var(VERSION))) uv tool install --excludes (printf ziglang\ndecomp2dbg\nipython) --python$PY_VER githttps://github.com/pwndbg/pwndbg echo source $(uv tool dir)/pwndbg/share/pwndbg/gdbinit.py ~/.gdbinit从 pyproject.toml 的依赖声明可以看出这三者的用途ziglang仅服务于cymbol命令与部分asm功能且在 loongarch64 上本就不可用decomp2dbg用于安装反编译器插件ipython仅服务于ipi命令。剔除它们不影响 Pwndbg 的常规断点、堆、搜索等核心功能。所有 uv 源码安装方式的卸载统一为uv tool uninstall pwndbg再视情况从~/.gdbinit中移除对应的source行。方式三其他安装方法HomebrewmacOS# pwndbg-gdb brew install pwndbg/tap/pwndbg-gdb # pwndbg-lldb brew install pwndbg/tap/pwndbg-lldbNixLinux/macOS# pwndbg-gdb nix shell github:pwndbg/pwndbg # pwndbg-lldb nix shell github:pwndbg/pwndbg#pwndbg-lldb仓库内的 nix/pwndbg.nix 展示了 Nix 打包的实现思路它会基于pyenv.nix构建 Python 环境按groups参数决定产出pwndbg、pwndbg-lldb或pwndbg-any入口并通过makeWrapper把pwntoolsLinux 上还有ropper等辅助工具注入PATH与便携版中虚拟环境 bin 目录前置到 PATH的设计保持一致。发行版打包文件RPM/DEB/Alpine/Arch使用 GDB 时你还可以直接从 releases 页面下载对应平台的软件包文件用系统包管理器安装以 2026.07.29 版本为例实际请替换为你下载到的文件名 RPM RPM 系CentOS/Alma/Rocky/RHEL{.bash .copy} dnf install ./pwndbg-2026.07.29.x86_64.rpm DEB DEB 系Debian/Ubuntu/Kali{.bash .copy} apt install ./pwndbg_2026.07.29_amd64.deb Alpine{.bash .copy} apk add --allow-untrusted ./pwndbg_2026.07.29_x86_64.apk Arch Linux{.bash .copy} pacman -U ./pwndbg-2026.07.29-1-x86_64.pkg.tar.zst发行版软件仓库你也可以通过发行版自带的包管理器直接安装 Pwndbg但官方文档明确说明该方式不受官方支持因为上游无法控制这种情况下 Pwndbg 所依赖的 Python 包版本。因此在复现 bug 报告时请改用其他受支持的方式便携包通常最简单若某个 bug 在用发行版包时可复现、用受支持方式却不可复现应优先反馈给软件包维护者。 Arch{.bash .copy} sudo pacman -S pwndbg安装后可直接使用pwndbg与pwndbg-lldb命令。 Gentoo{.bash .copy} sudo emerge --ask dev-debug/pwndbg安装后同样获得pwndbg与pwndbg-lldb命令。手动安装便携版Portable Version你也可以从 releases 页面手动下载便携版压缩包GDB 与 LLDB 有各自独立的发布产物根据你的系统架构从第一张表中选取对应文件解压后即可运行tar -v -xf archive-name运行方式取决于你下载的是哪个版本./pwndbg/bin/pwndbg或./pwndbg/bin/pwndbg-lldb建议把pwndbg/bin目录加入 shell 的PATH以便全局调用。macOS 隔离标志处理macOS 的 Gatekeeper 会阻止解压出的文件直接执行而便携版文件众多逐个授权很繁琐。可以在解压后一次性清除所有文件的 quarantine 标志假设解压目录名为pwndbgxattr -rd com.apple.quarantine pwndbg传统脚本安装Legacy setup.sh仓库仍然保留了传统的 setup.sh 安装脚本但注意它需要 root 权限内部调用 sudogit clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh该方式得到的最终效果与上文系统 GDB从~/.gdbinit加载完全相同后续可用git pull更新。从 setup.sh 源码看脚本的完整流程为按/etc/os-release的ID识别发行版ubuntu/fedora/arch/void/gentoo/aosc/opensuse 等分别调用apt-get、dnf、pacman、xbps、emerge、zypper等安装系统依赖如gdb、gdbserver、python3-dev、libc6-dbg/debuginfo等调试符号包对未知发行版会回退探测apt/dnf/pacman是否可用通过gdb -batch -q --nx -ex pi import sysconfig; ...探测 GDB 编译所用的 Python 解释器与版本PYTHON、PYVER校验版本是否落在 3.10 ~ 3.19 的受支持区间——不支持时脚本会提示改用旧版本发布如 2024.08.29 支持 Python 3.8/3.92023.07.17 支持 3.6/3.7用探测到的 Python 创建虚拟环境默认在仓库下的.venv在 venv 内安装 uv再以uv sync --no-install-project --group build与uv sync --no-build-isolation-package pwndbg拉取依赖无隔离构建便于离线场景若~/.gdbinit中尚未包含source .../pwndbg/gdbinit.py的行则追加该行实现每次启动 GDB 自动加载。安装后的验证与 pwntools 集成安装完成后可以执行pwndbg /bin/ls或直接输入pwndbg进入界面确认加载成功界面上应出现 Pwndbg 的 banner 与pwndbg前缀。若使用~/.gdbinit方式则正常输入gdb即可看到 Pwndbg 被自动加载。在 pwntools 脚本中使用时设置context.gdb_binary pwndbg即可让 pwntools 以 Pwndbg 作为调试器启动子进程脚本其余用法gdb.debug、gdb.attach等保持不变。原理补充入口点与加载机制理解 Pwndbg 的启动链路有助于排查安装问题。根据 pyproject.toml 的[project.scripts]声明pwndbg pwndbginit.pwndbg_gdb:main pwndbg-lldb pwndbginit.pwndbg_lldb:mainpwndbg命令的入口是 pwndbginit/pwndbg_gdb.py它先把虚拟环境的bin目录前置到PATH供ropper、pwntools等工具调用然后优先尝试导入项目内置的gdb_for_pwndbg若不可用则回退到系统gdb并校验系统 GDB 的 Python 版本是否与当前解释器一致不一致会给出重新uv tool install --python$PY_VER的提示最后通过-iex py import pwndbginit.gdbinit; ...完成插件初始化。无论是source gdbinit.pygdbinit.py还是便携版启动最终都会进入 pwndbginit/gdbinit.py 的main()设置 UTF-8 字符集、执行防重复加载检查避免同时被~/.gdbinit与便携版加载两次、校验虚拟环境路径verify_venv、初始化pwndbg.dbg_mod.gdb.GDB()并调用setup()。仓库根目录的 gdbinit.py 还包含fixup_paths逻辑它会定位虚拟环境的site-packages加入sys.path、移除系统级site-packages、把sys.prefix指向虚拟环境从而保证 Pwndbg 使用的依赖全部来自其私有环境不会与系统 Python 环境互相污染。开发环境从能用到可改如果你计划为 Pwndbg 贡献代码或深入调试其内部实现在完成上述任意一种安装后参考 docs/contributing/setup-pwndbg-dev.md 搭建开发环境最简单的方式是运行仓库根目录的 setup-dev.sh它会配置好开发所需的依赖分组build/dev/lint/tests/docs 等见 pyproject.toml 的[dependency-groups]也可以使用 Dockerdocker compose run -i main对应 docker-compose.yml或手动docker build -t pwndbg .后以--cap-addSYS_PTRACE --security-opt seccompunconfined参数运行容器并挂载当前目录或使用 Nix 开发壳安装 Nix 后进入仓库执行nix develop即可用pwndbg/pwndbg-lldb运行本地改动用./tests.sh运行测试。值得注意的是完整的开发环境要求 Pwndbg 在 GDB 与 LLDB 下都能运行否则部分开发特性如文档生成不可用。常见问题速查uv tool install后启动报 Python 版本错误通常是系统 GDB/LLDB 编译期 Python 与 uv 默认 Python 不一致按上文使用系统 GDB/LLDB一节用PY_VER$(gdb ...)探测并显式传入--python$PY_VER即可。GDB 提示 Pwndbg 重复加载说明~/.gdbinit中的source gdbinit.py与便携版/其他入口同时生效删除~/.gdbinit中对应行即可pwndbginit/gdbinit.py 的check_doubleload会明确提示这一点。找不到虚拟环境目录gdbinit.py无法定位.venv时会提示重新运行setup.sh可通过PWNDBG_VENV_PATH环境变量显式指定虚拟环境路径。如何更新便携版方式重跑安装命令uv 方式重跑uv tool installsetup.sh方式git pull后重跑脚本。如何卸载便携版按上文分别删除/usr/local或~/.local下对应目录与符号链接uv 方式执行uv tool uninstall pwndbg并清理~/.gdbinit。选择哪种安装方式本质上是在开箱即用便携版、跟随上游uv 源码安装与融入系统发行版包之间做取舍。官方文档与本文的立场一致日常使用优先便携版与 uv 方式复现 bug 时请使用受支持路径以免将环境差异误判为 Pwndbg 本身的问题。【免费下载链接】pwndbgExploit Development and Reverse Engineering with GDB LLDB Made Easy项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表