惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
T
Troy Hunt's Blog
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
U
Unit 42
Last Week in AI
Last Week in AI
云风的 BLOG
云风的 BLOG
F
Full Disclosure
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
Hacker News - Newest:
Hacker News - Newest: "LLM"
IT之家
IT之家
Google Online Security Blog
Google Online Security Blog
Cloudbric
Cloudbric
月光博客
月光博客
Hacker News: Ask HN
Hacker News: Ask HN
罗磊的独立博客
N
News and Events Feed by Topic
S
Secure Thoughts
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
I
InfoQ
Hugging Face - Blog
Hugging Face - Blog
I
Intezer
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 聂微东
P
Privacy International News Feed
有赞技术团队
有赞技术团队
博客园_首页
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
O
OpenAI News
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tor Project blog
B
Blog
量子位
T
Threatpost
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Vulnerabilities – Threatpost
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
L
LangChain Blog

博客园 - PKICA

rust自定义线程属性std::thread::Builder rust线程 rust关联函数 rust高并发设计实践进阶 rust高并发设计实践 rust性能优化与安全边界 联合体union在rust和C语言中有什么区别 rust并发与异步编程 如何预防rust不良的代码设计总结 rust类型系统与零成本抽象 rust内存模型 告别大显存依赖!用 Rust 新一代深度学习框架 Burn 打造纯 CPU 文本分类推理引擎 rust类型系统标记 编译配置解答 git实用命令 rust底层设计理念值得注意的几个地方总结 rust可变引用作为函数参数的机理详解 Rust内存重解释transmute C与Rust类型映射 Rust FFI 安全抽象范式 rust延迟初始化原语 rust重借用机制与原理 rust参数传递模型 汇编语言语法详解 gdb汇编调试 gdb-pwndbg的安装与使用指南 C语言thread_local linux系统readelf命令使用指南 gcore转储进程内存 gdb查看命令 RGB与YUV颜色编码的区别 Rust原子类型 C++ STL求两个集合交集差集 gdb调试集锦 ubuntu24.0.4使用root用户登录 ubuntu24.0.4输入密码后跳回登录界面 AI内存压缩技术TurboQuant及存疑 ubuntu切换到指定内核版本 在没有顶级科技大佬直接背书的情况下deepseek为啥能够异军突起? HuggingFace和deepseek的关系 当前主流AI大模型 Rust写时克隆Cow系列2
gdb调试插件gef
PKICA · 2026-04-15 · via 博客园 - PKICA

在计算机领域,GEF (GDB Enhanced Features) 是一款专为逆向工程、漏洞利用和安全研究设计的 GDB (GNU Debugger) 插件。它利用 Python API 增强了 GDB 的功能,提供了更直观、更丰富的信息展示界面。

一、 安装方法

GEF 几乎不需要外部依赖,主要通过一个 .gdbinit 脚本起作用。

  • 准备环境:确保系统中已安装 GDB (版本 7.7 及以上) 和 Python
  • 一键安装:在 Linux 终端执行以下命令(选择其一):
    • 使用 wget:
      bash -c "$(wget https://gef.blah.cat/sh -O -)" // 自动添加支持,多插件不建议使用该方法。
      
    • 使用 curl:
      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
  • 验证安装:启动 GDB,如果看到 gef> 提示符,则表示安装成功。("~/.gdbinit"为实际配置文件,想全局共用建议放到/etc/gdb/gdbinit)

二、 核心功能与使用

GEF 启动后会提供一个多面板界面,实时显示寄存器、堆栈、代码汇编等信息。

  • 界面组成:
    • Registers: 显示当前所有寄存器的状态。
    • Stack: 显示栈顶内容。
    • Code: 显示当前指令及其上下文。
    • Trace: 显示函数调用链。
  • 常用命令:
    • context:重新刷新并显示当前的调试状态面板。
    • pattern create [size]:生成用于确定溢出偏移量的特征字符串。
    • pattern search [address]:搜索特征字符串以定位偏移位置。
    • vmmap:查看进程的内存布局(如堆、栈、共享库的地址范围)。
    • checksec:检查二进制文件的安全保护机制(如 NX、PIE、Canary 等)。
    • heap:管理和查看堆分配情况(需特定环境支持)。
    • entry-break:在程序入口处自动下断点并运行。

三、 常见问题

  • 版本更新:若要获取最新功能,可在 GDB 内部执行 gef config gef.disable_update false 后使用 gef update
  • 多插件共存如果同时安装了 PEDAPwndbg,可以通过修改 ~/.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

参考资料:

GEF

GDB的GEF插件