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

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threat Research - Cisco Blogs
Latest news
Latest news
Project Zero
Project Zero
TaoSecurity Blog
TaoSecurity Blog
Cyberwarzone
Cyberwarzone
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
P
Privacy & Cybersecurity Law Blog
T
Troy Hunt's Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
Hacker News: Ask HN
Hacker News: Ask HN
S
Security @ Cisco Blogs
C
Cisco Blogs
Help Net Security
Help Net Security
I
Intezer
W
WeLiveSecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
腾讯CDC
S
Secure Thoughts
MyScale Blog
MyScale Blog
Recorded Future
Recorded Future
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
A
About on SuperTechFans
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
J
Java Code Geeks
The Hacker News
The Hacker News
阮一峰的网络日志
阮一峰的网络日志
Scott Helme
Scott Helme
Recent Announcements
Recent Announcements
AI
AI
Cisco Talos Blog
Cisco Talos Blog
B
Blog RSS Feed
V
Vulnerabilities – Threatpost
C
Check Point Blog
Security Latest
Security Latest
S
SegmentFault 最新的问题
T
The Exploit Database - CXSecurity.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
M
MIT News - Artificial intelligence
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
PCI Perspectives
PCI Perspectives
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - PKICA

编译配置解答 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插件