GDB gef 插件安装与使用
GDB gef插件安装与使用
GEF(GDB Enhanced Features)是 GDB 的第三方增强插件,用于可视化分析 glibc 堆结构、chunk 布局,辅助定位堆内存损坏导致的 coredump 问题。
一、安装 gef 插件
1.1 下载合适的版本
先查询 GDB 内置的 Python 版本:
(gdb) python import sys; print(sys.version)
2.7.13 (default, Jan 11 2017, 10:56:06) [GCC]
- Python 3.x:从 https://github.com/hugsy/gef/tags 下载 gef。注意 gef 2025.01 及之后的版本要求 GDB 内置 Python 3.10+。
- Python 2.x:建议下载 gef-legacy 版本 https://github.com/hugsy/gef-legacy。
1.2 安装
- 将 gef 放到某个目录,例如
$GEF_PATH目录下。 - 将加载指令写入 GDB 初始化配置文件:
echo "source $GEF_PATH/gef-legacy/gef.py" >> ~/.gdbinit - 执行 gdb,若提示符变为
gef>则安装成功。
二、gef 分析 glibc 堆结构常用命令
2.1 heap 系列命令
| 命令 | 说明 |
|---|---|
heap arenas |
列出程序中所有活跃的 arena |
heap set-arena <addr> |
手动设置 main_arena 的地址 |
heap chunks |
显示当前 arena 中所有堆块信息 |
heap chunk <addr> |
显示指定地址堆块的详细信息 |
heap bins |
显示所有 bin 链表状态 |
heap bins fast |
显示 fastbins 链表 |
heap bins tcache |
显示 tcache 链表(glibc 2.26+) |
heap bins unsorted |
显示 unsorted bin 链表 |
heap bins small |
显示 small bins 链表 |
heap bins large |
显示 large bins 链表 |
2.2 其他常用命令
| 命令 | 说明 |
|---|---|
telescope <addr> |
递归解引用一个地址 |
hexdump <addr> |
以十六进制显示内存范围的内容 |
xinfo <addr> |
查询指定地址的虚拟内存段信息,确认地址合法性 |
search-pattern <pattern>(别名 grep) |
在进程内存中搜索特定字符串或字节序列。可用于定位被写入堆元数据的可疑数据(如攻击者控制的地址) |
vmmap |
显示进程完整虚拟内存映射,高亮堆、栈、代码段等区域 |
2.3 典型分析流程
- 确定战场:用
vmmap找到堆的范围,用heap arenas确定出问题的 arena。 - 观察现状:用
heap chunks查看整体布局,找出异常 chunk(如 size 字段明显不对)。 - 深入病灶:用
heap chunk <addr>检查可疑 chunk 的元数据。 - 追查线索:用
heap bins查看各链表现状,若发现某个 bin 的 fd/bk 指向异常地址,用telescope和hexdump查看该地址内容。

浙公网安备 33010602011771号