跳至内容

c3n1g's Docs

Diff

8
  • 2.3 语义匹配与符号执行
  • 1.1 什么是二进制Diff
  • 1.2 历史发展
  • 1.3 为什么需要二进制Diff
  • 1.4 核心应用场景
  • 1.5 术语与对比
  • 2.1 函数匹配算法
  • 2.2 结构匹配与图算法
View Categories
  • 首页
  • 文档
  • Binary
  • Diff
  • 1.5 术语与对比

1.5 术语与对比

c3n1g
更新 2026年4月4日

< 1 min read

1.5.1 核心概念术语 #

术语英文定义
二进制Binary编译后的可执行文件,包含机器码
反汇编Disassembly将机器码转换为汇编指令
控制流图Control Flow Graph (CFG)表示程序执行路径的有向图
基本块Basic Block顺序执行的指令序列,只有一个入口和一个出口
调用图Call Graph函数调用关系的有向图
中间表示Intermediate Representation (IR)抽象的代码表示形式
符号执行Symbolic Execution使用符号值进行程序分析

1.5.2 分析技术术语 #

术语定义
函数匹配在两个二进制中识别对应函数的过程
CFG同构两个控制流图结构相同
语义等价两个代码段功能相同,即使指令不同
代码相似度衡量两段代码相似程度的数值
函数指纹用于唯一标识函数的特征
哈希碰撞不同内容产生相同哈希值

1.5.3 工具相关术语 #

术语定义
IDA Pro业界标准的反汇编工具
GhidraNSA开源的逆向工程框架
BinDiffZynamics开发的二进制diff工具
Diaphora开源的IDA数据库比较工具
Binary Ninja现代化的二进制分析平台

1.5.4 二进制Diff与源代码Diff的对比分析 #

信息层面对比 #

源代码信息                             二进制信息
┌────────────────────────┐            ┌─────────────────────┐
│ /**                    │            │ 55                  │
│  * 计算两个数的和      │            │ 89 E5               │
│  * @param a 第一个数   │            │ 8B 45 0C            │
│  * @param b 第二个数   │            │ 03 45 08            │
│  * @return 和          │            │ 5D                  │
│  */                    │            │ C3                  │
│ int add(int a, int b) {│            │                     │
│     return a + b;      │            │ 完全丢失:           │
│ }                      │            │ - 注释              │
└────────────────────────┘            │ - 变量名            │
                                      │ - 类型信息          │
                                      │ - 函数名            │
                                      └─────────────────────┘

技术层面对比 #

维度源代码Diff二进制Diff
粒度字符、行、语句、函数字节、指令、基本块、函数
结构AST、CFGCFG、调用图、数据流图
语义类型系统、变量作用域寄存器、内存访问模式
噪声格式化、空白字符编译器、优化级别、混淆
工具diff, git diff, merge工具BinDiff, Diaphora等
自动化程度高(语法差异明显)低(需语义理解)

应用场景对比 #

场景源代码Diff二进制Diff
开发协作✅ 主要工具❌ 不适用
代码审查✅ 标准流程❌ 不适用
补丁分析⚠️ 需源码✅ 主要方法
恶意软件分析❌ 无源码✅ 核心技术
漏洞挖掘⚠️ 部分适用✅ 主要方法
供应链安全⚠️ 需源码✅ 适用广泛

挑战对比 #

源代码Diff的挑战:

  • 大规模代码库效率
  • 语法等价但格式不同的代码
  • 重命名重构

二进制Diff的挑战:

  • 信息丢失严重
  • 编译器差异巨大
  • 代码混淆干扰
  • 计算复杂度高
1.4 核心应用场景2.1 函数匹配算法
内容目录
  • 1.5.1 核心概念术语
  • 1.5.2 分析技术术语
  • 1.5.3 工具相关术语
  • 1.5.4 二进制Diff与源代码Diff的对比分析
    • 信息层面对比
    • 技术层面对比
    • 应用场景对比
    • 挑战对比
© 2026 c3n1g's Docs • Built with GeneratePress