ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Pwndbg 命令全景指南:从命令分类到源码级解析(docs/commands 索引)

Pwndbg 命令全景指南:从命令分类到源码级解析(docs/commands 索引) Pwndbg 命令全景指南从命令分类到源码级解析docs/commands 索引【免费下载链接】pwndbgExploit Development and Reverse Engineering with GDB LLDB Made Easy项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbgPwndbg 是运行在 GDB 与 LLDB 之上的渗透调试插件集合其全部功能都以命令的形式暴露给用户。本文以仓库中的 docs/commands/index.md 命令索引为骨架系统梳理 Pwndbg 命令的分类体系、典型用法与文档自动生成机制并结合 pwndbg/commands/init.py 等源码解释命令注册、参数解析与文档同步的实现原理帮助你快速建立命令地图学会查阅任意命令的完整帮助与实战示例。Pwndbg 上下文展示界面命令输出整合了寄存器、反汇编与栈信息一、命令总览与分类体系Pwndbg 的命令按功能划分为 20 个分类每个分类对应一个独立文档目录。以下为完整分类清单及对应文档位置分类Category目录命令数覆盖范围Allocatorsdocs/commands/allocators2jemalloc、mallocngmusl分配器Breakpointdocs/commands/breakpoint4分支断点、RVA 断点、忽略计数Contextdocs/commands/context7上下文输出、历史、watch 表达式Darwin/libsystem/Mach-Odocs/commands/darwin_libsystem_mach-o1macOS commpageDeveloperdocs/commands/developer6日志级别、memoize、profiler、reloadDisassembledocs/commands/disassemble2nearpc、emulate 模拟执行GLibc Heapdocs/commands/glibc_heap17arena、bins、tcache、chunk 可视化Integrationsdocs/commands/integrations8AI、反编译器、radare2/rizin、ROP 工具Kerneldocs/commands/kernel31内核内存、页表、SLUB、BPF、MSRLinux/libc/ELFdocs/commands/linux_libc_elf23GOT/PLT、auxv、envp、TLS、one_gadgetMemorydocs/commands/memory18vmmap、search、telescope、leakfindMiscdocs/commands/misc23checksec、cyclic、patch、dt、sprayProcessdocs/commands/process3pid、procinfo、killthreadsPwndbgdocs/commands/pwndbg6config、theme、version、bugreportRegisterdocs/commands/register4CPSR、FS/GS base、setflagStackdocs/commands/stack6stack、canary、retaddr、栈帧可视化Startdocs/commands/start4start、entry、sstart、attachpStep/Next/Continuedocs/commands/step_next_continue11nextcall、nextjmp、nextsyscall、xuntilWinDbgdocs/commands/windbg24WinDbg 兼容命令bp/bd/be/eb/...Developerdocs/commands/developer6上表已列此处为索引重复归类分类枚举定义于源码 pwndbg/commands/init.py 的CommandCategory类中文档目录名由category_to_folder_name()将分类名小写化并把空格与/替换为_生成见 scripts/_docs/command_docs_common.py例如Linux/libc/ELF→linux_libc_elf。二、快速定位命令pwndbg命令与help function在 GDB 会话中输入pwndbg等价于旧版 Pwndbg 中常用的命令列表功能即可查看全部已注册命令按分类以表格形式输出每行包含命令名、别名Aliases与一行描述。usage: pwndbg [-h] [-c CATEGORY_ | --list-categories] [filter_pattern]位置参数与可选参数定义见 docs/commands/pwndbg/pwndbg.md参数类型说明filter_pattern位置参数可选按命令名或描述过滤不区分大小写子串匹配-c, --category CATEGORY_可选只显示指定分类的命令--list-categories可选标志仅列出全部分类名不显示命令参数之间互斥-c与--list-categories不能同时使用其实现位于 pwndbg/commands/pwndbg_.py底层由list_and_filter_commands()遍历pwndbg.commands.commands全局列表取每个命令description的首行作为表格描述并支持别名高亮。典型用法pwndbg pwndbg --list-categories pwndbg pwndbg -c heap # 只看堆相关分类 pwndbg pwndbg tcache # 按名字/描述过滤所有命令均可在 GDB 中通过help 命令名查看完整用法也可以help function查看 Pwndbg 提供的便捷函数。三、按场景挑重点五大高频命令族实战3.1 启动与调试流程控制Start / Step/Next/Continuestart在第一个方便的位置停止程序entry停在程序入口地址sstart等价于tbreak __libc_start_main; runattachp按 pid、进程名、argv 部分匹配或设备文件附加进程步进类nextcall下一个 call、nextret下一个 ret 类指令、nextsyscall下一个不经过分支的 syscall、stepsyscall经过分支走到 syscall、stepuntilasm步进到指定指令、xuntil继续执行直到地址/表达式。nextsyscall与stepsyscall的差异在于后者会走过分支指令适用于分析被jcc保护的系统调用路径。3.2 内存与虚拟地址空间Memoryvmmap打印虚拟内存映射页支持过滤与上下文显示见下文详解search在可读内存页中搜索字节序列、字符串、指针与整数值telescope从指定地址递归解引用指针默认从$sp开始显示 8 行leakfind从给定地址尝试寻找泄露链probeleak指针扫描寻找可能的偏移泄露hexdump、xor、memfrob、mmap、mprotect 等提供底层内存操作能力。其中telescope是分析栈与堆指针链最常用的命令usage: telescope [-h] [-r] [-f] [-i] [address] [count]address起始地址默认$spcount显示行数默认 8-r/--reverse显示之前count个地址-f/--frame显示从 rsp 到 rbp 的栈帧-i/--inverse逆栈增长方向显示。3.3 GLibc 堆调试GLibc Heap堆分类是 Pwndbg 最具标志性的能力覆盖 glibc 动态内存分配器的全部分区概览类heap迭代打印堆上 chunk、vis-heap-chunks可视化 chunk 布局、hi判断地址属于哪个 chunk结构类arena / arenas、mp打印mp_结构、malloc-chunk、top-chunk分区类fastbins、smallbins、largebins、unsortedbin、bins一次性打印所有 bin 与 tcache、tcache、tcachebins高级工具find-fake-fast在指定地址附近寻找可用的 fake fast/tcache chunk、try-free模拟若对某地址调用 free 会发生什么。对应的实现位于 pwndbg/commands/glibc_malloc.py堆元数据读取依赖 pwndbg/aglib/heap 下的 glibc 结构定义。3.4 Linux 运行环境与 ELFLinux/libc/ELFgot / gotplt / plt查看 GOT/PLT 状态配合 track-got 可跟踪 GOT 改写piebase / breakrvaPIE 基址换算与按 RVA 下断点aslr查看/开关 ASLRone_gadget寻找一箭双雕的 execve gadgetauxv / auxv-explore、envp、tls、linkmap剖析进程运行时环境。3.5 内核调试Kernel内核命令族用于分析 Linux 内核常用于内核漏洞研究地址换算v2p / p2v虚拟地址与 physmap 地址互转、pagewalk页表遍历、pageinfo内核对象ktask内核 task、kbase内核虚拟基址、kmod已加载模块、kfiletask 的文件描述符、kstack、ksyscalls分配器与追踪slabSLUB、buddydumpbuddy 分配器、kmem-traceSLUB/buddy 分配与释放追踪安全配置kchecksec内核加固选项、kseccomp、ksighand。实现分散于 pwndbg/commands 下的 k*.py 文件底层内核结构解析依赖 pwndbg/aglib/kernel 与 pwndbg/lib/kernel/structs.py。四、命令文档的自动生成机制进阶docs/commands/下所有.md文件都由仓库工具自动生成index.md顶部标注THIS FILE IS AUTOGENERATED. DO NOT EDIT IT. See scripts/generate-docs.sh生成流程由 scripts/generate-docs.sh 驱动分两步提取extract执行 scripts/_docs/extract-all-docs.sh对 GDB 与 LLDB 分别运行 scripts/_docs/extract_command_docs.py遍历pwndbg.commands模块下所有CommandObj实例用 argparse 的 formatter 抽取 usage、位置参数、可选参数、示例、notes 与子命令并序列化为临时 JSON构建build执行 scripts/_docs/build_command_docs.py读取 JSON 生成每个命令的 Markdown 页与index.md索引设置环境变量PWNDBG_DOCGEN_VERIFY1时则进入校验模式逐行比对现有文档与应生成内容不一致即报错退出。索引页的生成逻辑scripts/_docs/build_command_docs.py正是本文第一节表格的数据来源按分类排序、命令名排序取描述首行作为列表摘要链接指向分类目录/命令名.md。命令注册与参数解析的源码级细节pwndbg/commands/init.py每条命令通过pwndbg.commands.Command(parser, category...)装饰器注册最终生成CommandObj实例并加入全局commands列表与command_names集合L147-L253命令名由函数名中的_替换为-得到如pwndbg_→pwndbg并断言命令名中不得含_允许覆盖白名单内置命令up/down/search/pwd/start/starti/ignore其余 GDB 内置命令不可覆盖L153-L161所有命令强制使用统一的CommandFormatter继承argparse.RawDescriptionHelpFormatter并把帮助文本重排为描述在前、usage 在后便于 GDB 的apropos取首行描述L83-L121整数类型参数会被替换为fix_int_reraise_arg它调用fix()将$rax、0xdeadbeef、寄存器名等表达式解析为调试器 Value任意位置参数若未显式声明 type 会直接断言报错以此规避类型解析漏洞L376-L383。这意味着文档中的 usage、参数表与示例本质上就是每条命令 argparse 定义的权威镜像——想给命令加参数改源码后运行./scripts/generate-docs.sh即可同步刷新文档。五、深入案例vmmap 与 checksec 的文档-实现对照5.1 vmmap内存地图命令的边界情况vmmap 的文档除了参数表还记录了该命令在特殊场景下的已知问题这些是理解其实现的重要线索未命名映射会被命名为[anon_%#x]取起始地址高位便于与search配合过滤QEMU user 目标下 gdbstub 不提供内存映射信息Pwndbg 不解析 QEMU 进程的/proc/$pid/maps若兜底失败会退化为整段[0, 0xffff...]vmmap导致着色与search能力受限QEMU kernel 场景使用gdb-pt-dump从 guest 页表解析可用配置项kernel-vmmap-via-page-tables off回退到 QEMU 的monitor info memcoredump 调试时通过info proc mappings与maintenance info sections尽量恢复映射最后兜底探查 CPU 寄存器中的地址是否可读生成explored映射该法较慢不会每次 stop 都执行支持 vmmap-add、vmmap-clear、vmmap-load 手工添加映射适用于裸机调试。其参数包括-w/--writable、-x/--executable、-A/-B/-C上下文行数默认前后各 1 行、--gaps显示未映射间隙与--refresh丢弃缓存重新获取macOS 默认受vmmap-cache配置控制别名lm, address, vprot, libs。vmmap 命令实际输出示例展示内存页权限与范围5.2 checksec二进制安全属性扫描checksec 调用checksec工具打印目标文件安全设置usage: checksec [-h] [-f FILE]唯一可选参数-f/--file用于指定文件缺省时针对当前调试对象。其自带示例展示了输出字段Arch、RELRO、StackCanary、NX、PIE、SHSTK、IBT其中 SHSTK/IBT 对应 CET 硬件缓解。封装实现在 pwndbg/wrappers/checksec.py与 pwndbg/commands/checksec.py 配合兼容 GDB 与 LLDB。六、给读者的使用建议善用pwndbg 过滤词忘记命令名时用关键字过滤即可想看某个分类全部命令用pwndbg -c 分类。每个命令文档都含可运行示例由于文档自动生成示例与Examples:、Notes:区块直接来自源码中pwndbg.commands.Command(examples..., notes...)参数pwndbg/commands/init.py因此docs/commands/里的每个页面都是usage 参数表 示例三件套可直接照抄演练。区分 GDB / LLDB 差异文档构建时会按调试器比对同一命令的参数差异不一致的页面用内容标签 GDB/ LLDB分开展示scripts/_docs/build_command_docs.py阅读时注意当前使用的调试器。想理解内核命令、堆命令的实现直接跳到对应源码文件与pwndbg/aglib下的分析模块想贡献新命令参考 docs/contributing/adding-a-command.md 与本文第四节描述的文档同步流程。七、附录完整命令索引以下按分类列出 docs/commands/index.md 中的全部命令与一行描述细节以各命令文档页为准Allocatorsjemalloc检查 jemalloc 分配器、mallocng检查 mallocng/musl 分配器Breakpointbreak-if-not-taken分支未命中时断下、break-if-taken分支命中时断下、breakrva按 PIE 基址的 RVA 下断点、ignore设置断点忽略计数Contextcontext打印启用的 context 区块、contextnext/contextprev在 context 历史中切换、contextoutput设置 context 区块输出、contextsearch在 context 历史中搜索、contextwatch/contextunwatch增删 watch 表达式、regs打印寄存器并增强信息Darwin/libsystem/Mach-Ocommpagedump macOS commpageDeveloperdev-dump-instructiondump 内部 PwndbgInstruction 属性、log-level设置日志级别、memoize切换缓存、profiler性能分析、reinit-pwndbg重新初始化全部状态、reload重载 PwndbgDisassembleemulate从$PC向前模拟执行反汇编、nearpc在指定地址附近反汇编GLibc Heap见 3.3 节共 arena、arenas、bins、fastbins、find-fake-fast、heap、hi、largebins、malloc-chunk、mp、smallbins、tcache、tcachebins、top-chunk、try-free、unsortedbin、vis-heap-chunksIntegrationsai向 GPT 提问当前调试上下文、decomp反编译指定地址附近代码、decompiler-integration控制反编译器集成、r2启动 radare2、r2pipe经 r2pipe 执行带状态 r2 命令、rop用 ROPgadget 导出 ROP gadget、ropper用 ropper 搜索 gadget、rz启动 rizin、rzpipe经 rzpipe 执行 rizin 命令Kernel见 3.5 节共 binder、buddydump、kbase、kbpf、kchecksec、kcmdline、kconfig、kcurrent、kdmabuf、kdmesg、kfile、klookup、kmem-trace、kmod、knamespace、knft、kseccomp、ksighand、kstack、ksyscalls、ktask、kversion、msr、p2v、pageinfo、pagewalk、slab、v2pLinux/libc/ELF见 3.4 节共 argc、argv、aslr、auxv-explore、auxv、elfsections、envp、errno、exithandlers、got、gotplt、libcinfo、linkmap、onegadget、parse-seccomp、piebase、plt、strings、threads、tls、track-got、track-heapMemory见 3.2 节共 distance、dump-register-frame、gdt、go-dump、go-type、hexdump、leakfind、memfrob、mmap、mprotect、p2p、probeleak、search、telescope、vmmap-add、vmmap-clear、vmmap-explore、vmmap、xinfo、xorMiscasm汇编 shellcode 为字节、checksec打印二进制安全设置、comm在汇编代码中加注释、cyclic循环模式生成/查找、cymbol添加自定义 C 结构、down/up栈帧切换、dtdump 类型信息、dumpargs打印 call/syscall 参数、getfile、hex2ptrhex 字符串转小端地址、hijack-fd替换 fd、ipi交互式 IPython、patch/patch-list/patch-revert指令补丁、plistdump 链表、sigreturn显示 SigreturnFrame、spray用 cyclic 值喷内存、tips、valistdump va_list 参数、vmmap-load从 ELF 加载映射Processkillthreads、pid、procinfo进程信息Pwndbgbugreport生成 bug 报告、config查看 Pwndbg 配置、configfile生成配置文件、pwndbg命令列表、theme主题配置、themefile生成主题配置、version版本与依赖Registercpsr打印 ARM CPSR/xPSR、fsbase、gsbase、setflag修改 flags 寄存器Stackcanary、retaddr栈上返回地址、stack-explore多线程栈探索、stack-vis栈帧可视化、stack、stackfStart见 3.1 节Step/Next/Continue见 3.1 节WinDbgbc/bd/be/bl/bp断点控制、da/db/dc/dd/dds/dq/ds/dw内存 dump、eb/ed/eq/ew/ez/eza内存写入、gocontinue 别名、kbacktrace 别名、ln最近符号、pcnextcall 别名、peb提示非 Windows 环境结语docs/commands/index.md是理解 Pwndbg 能力边界的最佳入口它既是一份可检索的命令地图也是命令文档自动生成流水线的输出样本。掌握命令名 → 分类文档 → 源码实现这条阅读链路后无论是日常调试、堆利用研究还是内核逆向你都能快速找到对应工具并理解其行为边界。如需为某个命令补充参数或示例请遵循源码注释DO NOT EDIT的约定直接修改命令实现并在根目录运行./scripts/generate-docs.sh同步文档。【免费下载链接】pwndbgExploit Development and Reverse Engineering with GDB LLDB Made Easy项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表