ARTICLE DETAIL

资讯详情

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

pwndbg 命令:Pwndbg 全命令清单速查工具的使用与实现解析

pwndbg 命令:Pwndbg 全命令清单速查工具的使用与实现解析 pwndbg 命令Pwndbg 全命令清单速查工具的使用与实现解析【免费下载链接】pwndbgExploit Development and Reverse Engineering with GDB LLDB Made Easy项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbgPwndbg 是一个基于 GDB 与 LLDB 的 Exploit 开发与逆向工程辅助插件随着命令不断积累如何快速找到某个功能对应哪条命令成为高频需求。pwndbg命令正是为此设计的内置命令索引工具它能在调试器内一键列出全部 Pwndbg 命令支持按名称/描述关键词过滤、按命令分类筛选并可用help function快速查看配套的便捷函数。读完本文你将掌握pwndbg命令的全部参数用法、分类体系、底层过滤机制以及如何借助它快速定位自己需要的功能入口。命令总览pwndbg命令由 Pwndbg 源码中的 pwndbg_ 实现 提供属于CommandCategory.PWNDBGPwndbg 分类其核心职责是打印出 Pwndbg 全部命令的清单。命令完整用法如下usage: pwndbg [-h] [-c CATEGORY_ | --list-categories] [filter_pattern]usage: pwndbg [-h] [-c CATEGORY_ | --list-categories] [filter_pattern]从源码看命令注册方式为 pwndbg/commands/pwndbg_.py#L30pwndbg.commands.Command(parser, command_namepwndbg, categoryCommandCategory.PWNDBG) def pwndbg_(filter_pattern, category_, list_categories) - None:也就是说命令的 Python 函数名是pwndbg_源码中统一约定命令函数名用下划线、对外命令名用连字符注册为调试器可见命令pwndbg。参数详解位置参数Positional arguments位置参数帮助说明filter_pattern应用于命令名称/文档的过滤器Filter to apply to commands names/docsfilter_pattern是可选的字符串参数源码中nargs?、默认None。传入后命令清单中只有名称或描述命中该关键词的命令会被列出。可选参数Optional arguments短参数长参数帮助说明-h--help显示帮助信息并退出-c--category按命令分类过滤Filter commands by category--list-categories列出命令分类List command categories需要注意两点参数约束-c/--category与--list-categories互斥。源码中它们被放入同一个add_mutually_exclusive_group()pwndbg/commands/pwndbg_.py#L13-L19同时指定会触发 argparse 的冲突报错--list-categories是store_true型开关不带值。命令分类体系--list-categories会遍历 CommandCategory 枚举 并逐行打印所有分类名绿色高亮。Pwndbg 当前定义的分类如下分类值覆盖的命令领域Start启动类start、entry、attachp 等Step/Next/Continue步进/继续类nextcall、nextret、stepsyscall 等Context上下文类context、contextwatch、regs 等GLibc Heapglibc 堆类heap、bins、fastbins、tcache 等Allocators分配器类jemalloc、mallocng 等Breakpoint断点类break-if-taken、ignore 等Memory内存类hexdump、search、telescope、vmmap 等Stack栈类stack、canary、retaddr 等Register寄存器类cpsr、fsbase、gsbase 等Process进程类pid、procinfo、killthreads 等Linux/libc/ELFLinux/libc/ELF 类argv、auxv、got、piebase 等Darwin/libsystem/Mach-ODarwin/macOS 类commpage 等Disassemble反汇编类nearpc、emulate 等Misc杂项类checksec、cyclic、patch、sigreturn 等Kernel内核类kbase、kbpf、kdmabuf、slab、pagewalk 等Integrations集成类decompiler-integration、r2、rz、rop、ropper 等WinDbgWinDbg 兼容命令类bp、bd、be、dd、dq、k 等PwndbgPwndbg 自身管理类本命令所在分类ShellShell 类命令Developer开发者类reload、memoize、profiler、log-level 等分类名与文档目录的对应关系由 category_to_folder_name 维护分类名转小写后把空格与/替换为_即得到docs/commands/下对应的子目录名如Linux/libc/ELF→linux_libc_elf/。命令清单输出与过滤逻辑过滤与排序的底层实现pwndbg命令的过滤核心是 list_and_filter_commandsdef list_and_filter_commands(filter_str: str) - list[tuple[str, list[str], CommandCategory, str]]: sorted_commands sorted(pwndbg.commands.commands, keylambda c: c.command_name) if filter_str: filter_str filter_str.lower() results [] for c in sorted_commands: name c.command_name desc c.description assert desc desc desc.splitlines()[0] if not filter_str or filter_str in name.lower() or (desc and filter_str in desc.lower()): results.append((name, c.aliases, c.category, desc)) return results其关键行为可归纳为不传过滤器时返回全部命令按命令名字母序排序传过滤器时过滤器先转小写再对每条命令的名称与描述首行desc.splitlines()[0]做不区分大小写的子串匹配in判断命中任一即保留别名处理结果中会携带每条命令的aliases输出时以蓝色在命令名后以[alias1, alias2]形式展示pwndbg_ 实现由于使用in子串匹配而非完整匹配pwndbg heap也能命中描述中含 heap 的其他命令如bins、fastbins。输出布局匹配到的命令会按分类分组成表每个分类输出一个两列表格表头为[分类名 Commands] [Aliases]与Description分类名与命令名绿色加粗、别名蓝色。最终还会追加一行提示Also check out convenience functions with help function!这里呼应的是 Pwndbg 的另一套能力——GDB 便捷函数convenience functions例如$rebase()、$base()、$hex2ptr()、$argc()、$argv()、$environ()、$envp()、$fsbase()、$gsbase()、$v2p()、$p2v()、$percpu()等定义于 pwndbg/gdblib/functions.py。在 GDB 中可通过help function查看这些函数说明。典型使用场景场景一查看全部命令pwndbg pwndbg输出为按分类分组的完整命令清单适合刚加载 Pwndbg 时概览所有可用能力。场景二按关键词定位命令pwndbg pwndbg heap列出名称或描述中含 heap 的所有命令例如堆相关的heap、bins、fastbins、tcache、unsortedbin等同时也可能命中描述提及 heap 的其他命令。场景三只看某个分类pwndbg pwndbg --category kernel仅展示Kernel分类下的命令。注意-c的匹配逻辑pwndbg_ 实现是大小写不敏感的子串匹配category_.lower() not in category.lower()因此pwndbg -c kernel、pwndbg -c KERNEL、甚至pwndbg -c kern都能命中Kernel分类而pwndbg -c heap会同时命中GLibc Heap分类。场景四查看分类清单pwndbg pwndbg --list-categories打印全部 20 个分类名便于先看有哪些领域再配合-c深入某个分类。场景五组合使用过滤器与分类pwndbg pwndbg -c glibc heap fastbins在GLibc Heap分类内进一步用fastbins过滤命令名/描述。需要注意互斥约束-c与--list-categories不能同时使用。深入原理命令注册与文档自动生成命令对象模型Pwndbg 的每个命令都是一个 CommandObj构造时会把命令名、别名、分类、描述来自 argparse parser 的 description等元数据统一登记到全局commands列表与command_names集合中register_command并通过pwndbg.dbg.add_command同时注册命令名和所有别名。pwndbg命令的清单数据源正是这份全局登记表因此它天然保持最新、与源码注册的命令一致。文档的自动生成本文所参考的 docs/commands/pwndbg/pwndbg.md 属于自动生成文档文件开头与结尾的标记注释表明其 usage、参数表格等内容由 scripts/generate-docs.sh 调用 build_command_docs.py 从命令的帮助信息--help输出提取生成。这保证了文档与命令实现始终同步docs/commands/下每个分类子目录对应一个分类的命令文档。生成后的命令文档同时覆盖 GDB 与 LLDB 两种调试器后端见 gen_docs_generic.py 的 ALL_DEBUGGERS。小结pwndbg命令是 Pwndbg 内置的命令百科入口pwndbg列出全部命令pwndbg 关键词按名称/描述过滤pwndbg -c 分类按分类筛选pwndbg --list-categories查看分类体系配合help function还能浏览配套的便捷函数。它的实现依托 pwndbg/commands/pwndbg_.py 中基于全局命令登记表的统一过滤逻辑信息源与命令注册机制深度绑定因此任何时候查询到的清单都与当前加载的 Pwndbg 版本完全一致。掌握它等于掌握了在 Pwndbg 数百条命令中快速定位目标功能的钥匙。【免费下载链接】pwndbgExploit Development and Reverse Engineering with GDB LLDB Made Easy项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表