)
网络安全开发工具【免费下载链接】gefGEF (GDB Enhanced Features) - a modern experience for GDB with advanced debugging capabilities for exploit devs reverse engineers on Linux项目地址https://gitcode.com/gh_mirrors/gef/gef点击查看免费下载GEFGDB Enhanced Features的scan命令用于在一个内存区域haystack干草堆中搜索指向另一个内存区域needle针的指针地址并列出所有命中结果。它是逆向工程与漏洞利用开发中定位谁指向 libc / 谁指向堆 / 谁指向栈等关键数据的常用手段。读完本篇你将掌握scan的完整用法包括映射名与裸地址区间两种 needle/haystack 写法、输出格式含义以及从 ScanSectionCommand 源码看它如何解析参数、匹配内存映射并生成带解引用结果的输出。命令定位在两块内存映射之间做指针搜索scan解决的问题很具体搜索一个内存区域needle的地址出现在另一个区域haystack的哪些位置。典型场景比如scan stack libc栈上哪些槽位保存了指向 libc 的指针如函数指针、TLS 调节点scan binary heap二进制可执行段中哪些位置引用了堆地址scan heap libc堆块中保存了哪些 libc 指针辅助分析 UAF、double free 等问题。与 vmmap 类似scan的两个参数会先与进程的内存映射列表做匹配子串匹配映射路径从而确定要搜索的内存范围——你不需要手工查地址直接用stack、libc、binary这类语义化名称即可。基本语法与示例命令需要恰好两个参数缺少或多余参数会打印用法提示在 源码中的_syntax_定义为scan HAYSTACK NEEDLEgef➤ scan HAYSTACK NEEDLE即第一个参数是被搜索的区域haystack第二个参数是要搜索的目标区域needle。官方文档示例gef➤ scan stack libc [] Searching for addresses in stack that point to libc [stack]: 0x00007fffffffd6a8│0x1f6a8: 0x00007ffff77cf482 → __tunable_get_val [stack]: 0x00007fffffffd6b0│0x1f6b0: 0x00007ffff77bff78 → 0x0000001200001ab2 [stack]: 0x00007ffffffd758│0x1f758: 0x00007ffff77cd9d0 → 0x6c5f755f72647800 [stack]: 0x00007ffffffd778│0x1f778: 0x00007ffff77cd9d0 → 0x6c5f755f72647800 [stack]: 0x00007ffffffd7d8│0x1f7d8: 0x00007ffff77cd9d0 → 0x6c5f755f72647800 [...]输出逐行解读[stack]命中的 haystack 区域名来自匹配的内存映射文件名黄色高亮0x00007fffffffd6a8保存指针的栈地址0x1f6a8该地址相对于 haystack 起始页的偏移0x00007ffff77cf482 → __tunable_get_val指针值及其解引用结果函数名、数值等即 DereferenceCommand.pprint_dereferenced 生成的格式化输出还会附带寄存器提示若当前地址等于某寄存器值会追加- rax之类的标记。此外scan在 源码中注册了别名lookup两者等价。进阶 Needle/Haystack 语法地址区间处理无路径映射对于没有关联文件路径的映射例如匿名映射、[stack]、[heap]等无法靠子串匹配路径来定位此时可以直接使用**地址区间start-end**作为参数gef➤ scan 0x555555559000-0x555555560000 0x7ffff77cf000-0x7ffff79d1000注意两点原文档明确强调区间写法为start-end不包含空白字符否则会被 GDB 命令行解析拆散参数中出现0x时源码 会走 parse_string_range 解析路径以-拆分并按十六进制转为start/end两个整数构造为(start, end)的内存范围从而绕过路径匹配直接指定搜索范围。binary关键字指代当前调试目标源码实现 还支持一个文档示例之外的便捷关键字当 haystack 或 needle 写作binary时会被替换为当前调试目标的可执行文件路径通过get_filepath()获取等价于直接写该二进制文件的名字gef➤ scan binary libc即在当前二进制的映射范围内找出所有指向 libc 的指针。由于映射匹配是对sect.path做子串包含判断源码只要参数是映射路径的子串即可命中因此libc、libm、二进制文件名等都可以直接使用。源码解析scan 的执行流程结合 ScanSectionCommand.do_invoke整个命令的执行可以分为四步参数解析与特殊值替换校验参数个数必须为 2若 haystack/needle 为binary替换为目标可执行文件路径若包含0x按地址区间解析并加入对应的 sections 列表。内存映射匹配遍历gef.memory.maps与vmmap同源的数据跳过无路径的映射凡sect.path包含 haystack 子串的加入haystack_sections记录page_start、page_end及 basename包含 needle 子串的加入needle_sections记录page_start、page_end。按指针大小步进扫描对每个 haystack 区间一次性读取内存gef.memory.read读取失败gdb.MemoryError的区间直接跳过。随后以gef.arch.ptrsize为步长32 位为 4 字节用u3264 位为 8 字节用u64逐个反序列化机器字判断该字是否落在某个 needle 区间的[nstart, nend)内。格式化输出命中项命中后复用dereference命令的pprint_dereferenced(hstart, i / step)生成地址│偏移: 指针值 → 解引用格式的行haystack 若来自路径匹配hname非空则带黄色区域名前缀来自地址区间则不带。从源码结构看scan本质上是一个指针值过滤器它不做模式匹配而是把 haystack 里的每个机器字当作候选指针与 needle 地址区间做区间包含判断。因此其精度取决于架构指针宽度且只能发现恰好保存了指向 needle 区域的地址值的位置不会递归展开。运行前提scan带有only_if_gdb_running装饰器即必须在 GDB 已附加到目标进程且处于可访问内存的状态下执行。测试用例 也验证了这一点在未start之前执行scan libc stack会返回非活动会话错误start之后再执行即可得到包含目标路径的扫描结果并验证了scan binary libc的输出中能看到__libc_start_main这类 libc 符号。使用建议与限制参数顺序第一个参数写要被扫描的区域如stack、heap、二进制名或地址区间第二个参数写目标区域的来源如libc、binary或地址区间可对照源码_syntax_ scan HAYSTACK NEEDLE记忆名称匹配是子串匹配参数只要命中映射路径中的任意子串即可例如libc可匹配出libc-2.31.so对应的映射但同名/相似文件会一并纳入必要时可用精确地址区间收窄无名映射必须用地址区间[stack]、[heap]这类无路径映射无法通过文件名匹配到需要先用vmmap查出起止地址再写成start-end注意区间内不能有空格粒度为机器字扫描步长固定为架构指针大小偏移不在指针边界上的值不会被发现相关命令定位映射用vmmap进一步逐层展开指针用dereference搜索字节内容而非指针可用search-pattern参见 docs/commands/vmmap.md、docs/commands/dereference.md、docs/commands/search-pattern.md。赞分享网络安全开发工具【免费下载链接】gefGEF (GDB Enhanced Features) - a modern experience for GDB with advanced debugging capabilities for exploit devs reverse engineers on Linux项目地址https://gitcode.com/gh_mirrors/gef/gef点击查看免费下载相关推荐GEF aslr 命令实战在 GDB 中一键查看、开启与关闭 ASLRGEF aslr 命令实战在 GDB 中一键查看、开启与关闭 ASLR 本文围绕 GEFGDB Enhanced Features中的 aslr 命令展开网络安全开发工具GEF patch 命令实战在 GDB 中实时改写内存、注入 Shellcode 与动态 Patch 二进制GEF patch 命令实战在 GDB 中实时改写内存、注入 Shellcode 与动态 Patch 二进制 GEFGDB Enhanced Feature网络安全开发工具GEF memory 命令深度实践在 GDB 上下文视图中注册、管理与呈现内存监视区GEF memory 命令深度实践在 GDB 上下文视图中注册、管理与呈现内存监视区 在 GDB 逆向/漏洞调试中寄存器、栈、代码窗格只覆盖了一部分现场而网络安全开发工具上一篇ComfyUI ControlNet Aux完整指南一站式解决AI图像预处理难题下一篇如何永久保存你的微信记忆WeChatMsg数据自主管理终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考