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

推荐订阅源

GbyAI
GbyAI
博客园 - 三生石上(FineUI控件)
S
Securelist
U
Unit 42
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog
T
Tenable Blog
The Hacker News
The Hacker News
The Register - Security
The Register - Security
IT之家
IT之家
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
P
Privacy & Cybersecurity Law Blog
博客园_首页
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
Tor Project blog
C
CERT Recently Published Vulnerability Notes
Apple Machine Learning Research
Apple Machine Learning Research
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
A
Arctic Wolf
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
V2EX
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
V
Visual Studio Blog
月光博客
月光博客
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Heimdal Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

博客园 - GKLBB

软件神器 --- ctf靶场 之 pwn.college 术语俗话 --- 什么是加密狗 软件神器 --- 自动电脑锁屏软件 软件研发 --- 网络安全 之 putty生成无密码登录密钥 软件神器 --- 视频剪辑 之 Avidemux MP4Joiner Shotcut 软件神器 --- 视频格式转化 之 handbrake 软件研发 --- 经验之谈 这个是什么图标,经常看到 软件研发 --- 术语俗话 之 多模态 术语俗话 --- 什么是大数据开发 软件研发 --- 术语俗话 之 什么是边缘计算 软件研发 --- 应知应会 之 什么是云计算开发 应知应会 --- 如何不装软件查看网速 常见问题解决 --- 360拦截接触 常见问题解决 --- 加入会议摄像头无法打开 网络安全 --- CTF打靶 之 ZIP伪加密 → Robot36慢扫电视 → 二维码补齐 → DeepSound隐写 → GPG解密 → Base64图片 → SilentEye隐写 软件研发 --- 应知应会 之 无错误的闪退如何解决 软件研发 --- 应知应会 之 为什么别人的软件如此复杂我的如此简单 网络安全 --- 应知应会 之 什么是旁站 应知应会 --- 如何查询备案 软件神器 --- 格式转化 之 jpg 2 svg 网络安全 --- CTF打靶 之 flag搜索 软件神器 --- 互联网测速 之 软件神器 --- 局域网测速 之 iperf 常见问题解决 --- 模拟器USG6000打开后,启动设备失败,错误40 软件研发 --- AI网络 之 ensp配置生成 软件研发 --- AI编程 之 极简流程 软件研发 --- AI生图产品比较 常见问题解答 --- 为什么我的服务一直被人DDOS 软件研发 --- 开发万能格式转化工具 网站神器 --- 在线格式转化 之 文档转md 术语俗话 --- 什么是云电脑 常见问题解决 --- 如何在没有安装杀毒软件的情况下知道这个文件是不是牧马 常见问题解决 --- Win10下VMware 17安装VMware Tools选项灰色/失效解决办法 常见问题解决 --- 云电脑报错 :PAGE FAULT IN NONPAGED AREA 记一次牧马的发现 人生感悟 --- 为什么我们生活中同一件事有多个品牌,他们到底有什么区别 软件运维 --- 云电脑安装打印机 常见问题解决 --- 网络打印默认端口 常见问题解决 --- 京瓷打印云电脑无法设置双面打印 软件研发 --- 网络安全 之 brupsuite如何设置上游袋里 术语俗话 --- 什么是同步和异步 我的目标 软件研发 --- dify配置 之 markword转word带有简单样式的方法 软件研发 --- 接口文档格式 常见问题 --- dify 的 deepseek是旧模型版本 OWASP 非营利性开源社区 计算机标准化组织 术语俗话 --- POSIX 就是 Unix 世界的"普通话",大家说同一种语言就能互相理解。 我的数字生活唯一选择 软件开发 --- 安卓开发 之 命名空间隔离 术语俗话 --- 页面对齐、 跨页 计算机的哪些人 --- 社交之王 马克·扎克伯格 计算机的哪些人 --- 重新定义新能源 之 埃隆·马斯克 软件研发 --- AI生成ppt word excel pdf的开发关键 软件研发 --- AI应用开发 之 AI生成Word 人生感悟 --- 致可悲的人 软件研发 --- pdf 表格图片 转 excel 常见问题解决 --- 装有系统的固态硬盘错误 人生感悟 --- 什么是行业黑话 术语俗话 --- Kubernetes 术语俗话 --- 什么是DBI,和hook什么区别 答疑解惑 --- 为什么苹果手机电池不允许拆卸 代码可视化技术 术语俗话 --- Wrap 函数 人生感悟 --- 逆向工程为什么十分枯燥且无聊 --- 这里引用一句逆向工程核心原理的话 人生感悟 --- 为什么干活时不见同事,活干完了就来了 软件研发 --- AI应用研发 之 提炼提示词 软件研发 --- AI应用开发 之 AI生成PPT最佳方案 基于屏幕-摄像头的单向数据传输方案设计 俗语俗话 --- 纯虚函数 硬件研发 --- 产品介绍 之 AX6 硬件研发 --- 产品大全 之 SUMAVISION CM50X 应知应会 --- 为什么U盘不识别但是还是可以数据恢复回来 应知应会 --- 为什么我删除了一个文件但是还是可以恢复回来 软件研发 --- AI UI设计 之 PC端效果比对 常见问题修复 --- chrome浏览器白屏 应用安全 --- 逆向工程 之 C++类的本质 软件研发 --- AI提示词开发 之 代码注释提示词 dobby反编译 https://www.cnblogs.com/Un1corn/p/18615567 应知应会 --- 手机作为热点,windows电脑临时作为网关,给其他电脑上网 应知应会 --- 大量小文件如何快速迁移 常见问题解决 --- apk安装过程中闪退 应用安全 --- 安卓逆向 之 dobby框架 在线生成 APK 图标工具推荐 一个开源库 术语俗话 --- 什么是软件即服务 软件神器 --- 常用谷歌插件 应用安全 --- 逆向技巧 之 识别未知函数 人生感悟 --- 为什么两句话可以说明白的事情要500字说明 软件研发 --- Dify 生成 PPT 方案分析 应用安全 --- 逆向技巧 之 IDA未知函数如何识别 https://yuuki.cool/ 应用安全 --- 逆向技巧 之 ELF节(Section) 与 段(Segment) 硬件研发 --- 接口 人生感悟 --- 为什么ld一直爱开会 应用安全 --- 逆向技巧 之 IDA和claude反编译缺陷 应用安全 --- 逆向技巧 之 ida反编译yahfa的so和源码的差异化比对
应用安全 --- IDAPro签名 之 PAT文件解析
GKLBB · 2026-06-21 · via 博客园 - GKLBB

PAT 文件是 IDA FLAIR/FLIRT 的“文本签名源文件”。它不是最终给 IDA 加载的 .sig,而是给 sigmake 编译成 .sig 的中间文本文件。官方/常见格式说明里说:PAT 是文本文件,每个目标模块一行,最后用 --- 结束


1. PAT 文件整体结构

一个 .pat 文件通常长这样:

最后的:

表示 PAT 文件结束

也就是说,.pat 没有像 .sig 那样复杂的二进制文件头。它的主体就是一行一行的签名记录。


2. 每一行 PAT 的标准格式

一条函数/模块签名行大致格式是:

官方示例把它拆成这些字段:PATTERN BYTESALENASUMTOTAL LENGTH OF MODULEPUBLIC NAMESREFERENCED NAMESTAIL BYTES

通俗说就是:


3. 字段一:PATTERN,前 32 字节模式

格式:

含义:

内容解释
一共 64 个字符 代表前 32 个字节
4989D0 固定字节,匹配时必须完全一致
.. 一个可变字节
........ 4 个可变字节

例如:

表示:

后面的 4 字节是地址偏移,链接时可能变化,所以 PAT 里不能写死,只能写成:

Hex-Rays 官方说明也强调,函数签名首先记录函数前 32 字节,并把可变字节标出来;这些可变字节通常来自重定位、外部引用、链接器修正等。


4. 字段二:ALEN,CRC 计算长度

格式:

或:

含义:从第 33 个字节开始,有多少个连续固定字节参与 CRC16 计算。

注意:PATTERN 已经包含了前 32 字节。ALEN 管的是 第 32 字节之后 的一段固定字节。

例如:

表示:

如果写成:

表示:

你的例子里是:

原因是函数前 32 字节之后紧接着是 jmp 的相对偏移,这种偏移是可变的,所以不能算 CRC。

Hex-Rays 官方说明中也提到:当多个函数前 32 字节相同时,会从第 33 字节开始,直到遇到第一个可变字节之前,计算 CRC16;如果第 33 字节就是可变字节,那么 CRC 长度就是 0。


5. 字段三:ASUM,CRC16 值

格式:

或:

含义:上一段 ALEN 字节的 CRC16 校验值。

例如:

表示:

你的例子是:

意思是:


6. 字段四:MODLEN,模块总长度

格式:

含义:这个模块/函数的总长度。

你的例子:

表示:

也就是说,真正参与这条签名描述的函数代码范围是:

注意:这不是整个 .obj 文件大小,也不是 .pat 行长度,而是这个函数模块本身的长度。

PAT 格式说明里也明确说,TOTAL LENGTH OF MODULE IN BYTES 就是模块总长度,并且模块长度应小于 0x8000


7. 字段五:PUBLIC_NAMES,公开符号

格式:

例如你这条:

含义:

通俗说:

其中:

写法含义
:0000 name 模块偏移 0 处定义了公开名字
:0010 name 模块偏移 0x10 处也定义了一个名字
:0000@ name 本地名字/local name
:-0004 name 负偏移名字,少见

PAT 规定每条模块记录至少要有一个 public name;如果没有,预处理器通常会造一个 :0000 ?


8. 字段六:REFERENCED_NAMES,引用符号

格式:

含义:当前模块在某个偏移位置引用了另一个符号。

你的例子:

通俗解释:

字段意思
^0009 函数内部偏移 0x0009 处引用了一个符号
^0014 函数内部偏移 0x0014 处引用了另一个符号
^0020 函数内部偏移 0x0020 处引用了外部函数

这些引用位置通常对应:

这些 xxxx 是链接器/加载器修正的地址或偏移,所以对应字节在 PATTERN 或 TAIL 里一般会写成 ..

PAT 格式说明也说,引用名字用 ^XXXX name 表示,XXXX 是引用位置相对模块起点的偏移,而且该位置的字节显然是可变字节。


9. 字段七:TAIL_BYTES,尾部字节

格式:

或:

含义:CRC 块后面的剩余字节。

PAT 的前 32 字节已经放在 PATTERN 里了。第 32 字节之后,如果有一段固定字节,就用 ALEN + ASUM 表示;再往后剩下的内容,就放到 TAIL_BYTES

尾部字节的写法和前 32 字节一样:

写法含义
5D 固定字节
C3 固定字节
.. 一个可变字节
........ 4 个可变字节

你的例子最后是:

对应的是:

中的 4 字节相对跳转偏移。

也就是说:

其中 E9 已经在前 32 字节模式最后出现了,后面的 4 字节跳转偏移放在 TAIL_BYTES 里。


10. 用你的例子完整拆开

你的 PAT 行核心结构是:

可以拆成:

部分原始内容通俗解释
PATTERN 4989D0...C9E9 函数前 32 字节匹配模板
ALEN 00 第 32 字节后没有固定 CRC 区
ASUM 0000 CRC16 为 0
MODLEN 0024 函数模块长度 36 字节
PUBLIC_NAME :0000 _ZN64... 函数起点处的函数名
REF 1 ^0009 switch.table... 偏移 0x09 处引用字符串长度表
REF 2 ^0014 switch.table...1.rel 偏移 0x14 处引用字符串地址偏移表
REF 3 ^0020 _ZN42...str...Display... 偏移 0x20 处跳转到 Rust 字符串格式化函数
TAIL ........ 函数尾部 4 个可变字节

11. 偏移一定是“模块内偏移”

这是最容易搞错的地方。

PAT 里的:

都不是文件绝对偏移,而是:

如果这个函数在 IDA 里从 0x18 开始,那么:

PAT 偏移实际文件/IDA 偏移
0000 0x18
0009 0x21
0014 0x2C
0020 0x38

所以 ^0009 的意思不是文件偏移 0x09,而是:


12. PAT 匹配流程通俗理解

IDA 用 PAT/FLIRT 识别函数,大致是这样:

Hex-Rays 官方说明里也说,单靠前 32 字节不总是足够;如果多个函数前 32 字节相同,就继续用 CRC16、不同位置的字节、引用名称等方式区分。


13. 每个符号的速查表

符号/字段含义
XX 固定十六进制字节
.. 一个可变字节
........ 四个可变字节
PATTERN 前 32 字节模板
ALEN CRC 块长度
ASUM CRC16 值
MODLEN 模块总长度
:XXXX name 当前模块定义的公开名字
:XXXX@ name 当前模块定义的本地名字
^XXXX name 当前模块在偏移 XXXX 处引用了外部/内部符号
TAIL_BYTES CRC 块之后的剩余字节
--- PAT 文件结束

14. 一句话总结

PAT 文件每一行就是一个函数/模块的“指纹”:前 32 字节模式负责快速匹配,ALEN+ASUM 负责 CRC 校验,MODLEN 说明函数长度,:XXXX 记录本函数名字,^XXXX 记录它引用的符号,最后的尾部字节补充剩余机器码,整个文件最后用 --- 结束。

免责声明 本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。