






















在计算机领域,GEF (GDB Enhanced Features) 是一款专为逆向工程、漏洞利用和安全研究设计的 GDB (GNU Debugger) 插件。它利用 Python API 增强了 GDB 的功能,提供了更直观、更丰富的信息展示界面。
GEF 几乎不需要外部依赖,主要通过一个 .gdbinit 脚本起作用。
GDB (版本 7.7 及以上) 和 Python。bash -c "$(wget https://gef.blah.cat/sh -O -)" // 自动添加支持,多插件不建议使用该方法。
bash -c "$(curl -fsSL https://gef.blah.cat/sh)" // 自动添加支持,多插件不建议使用该方法。
wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/py //手动
echo "source ~/.gdbinit-gef.py" >> ~/.gdbinit
gef> 提示符,则表示安装成功。("~/.gdbinit"为实际配置文件,想全局共用建议放到/etc/gdb/gdbinit)GEF 启动后会提供一个多面板界面,实时显示寄存器、堆栈、代码汇编等信息。
context:重新刷新并显示当前的调试状态面板。pattern create [size]:生成用于确定溢出偏移量的特征字符串。pattern search [address]:搜索特征字符串以定位偏移位置。vmmap:查看进程的内存布局(如堆、栈、共享库的地址范围)。checksec:检查二进制文件的安全保护机制(如 NX、PIE、Canary 等)。heap:管理和查看堆分配情况(需特定环境支持)。entry-break:在程序入口处自动下断点并运行。gef config gef.disable_update false 后使用 gef update。PEDA 或 Pwndbg,可以通过修改 ~/.gdbinit 文件来手动切换加载哪一个脚本。如果想让各插件互不影响,可以使用下述方法:由于 gdb -p <PID> 的优先级极高,会抢在 init-gef 之前触发符号加载并报错,你必须在脚本中拦截 PID 参数,让它在 GEF 初始化之后再执行 attach。
可以在gdb中查看加载的符号链接索引位置:(gdb) show index-cache directory
1). 修改脚本 /usr/bin/gdb-gef
将脚本改为手动解析参数的模式。这种写法可以确保:先加载插件,后挂载进程。
#!/bin/bash
# 初始化变量
PID=""
OTHERS=()
# 解析参数,提取出 -p 后面的 PID
while [[ $# -gt 0 ]]; do
case $1 in
-p) PID="$2"; shift 2 ;;
*) OTHERS+=("$1"); shift ;;
esac
done
if [ -n "$PID" ]; then
# 核心技巧:不直接使用 gdb -p,而是进入后执行 attach 命令
exec gdb -q \
-ex "init-gef" \
-ex "attach $PID" \
"${OTHERS[@]}"
else
# 如果没有 -p,则正常启动
exec gdb -q -ex "init-gef" "${OTHERS[@]}"
fi
2). 检查 /etc/gdb/gdbinit 配置
确保你的 define 块指向的是绝对路径,这样最稳妥:
define init-gef
source $HOME/.gdbinit-gef.py
end
document init-gef
Initializes GEF (GDB Enhanced Features)
end
参考资料:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。