LELexEdge词汇锋面
网络安全专业术语

IR

Intermediate Representation

抽象中间层 · 让分析工具不再被指令集困住

二进制安全逆向工程程序分析
IR
定义
IRIntermediate Representation网络安全领域的专业术语IR(Intermediate Representation,中间表示)是二进制分析中将底层机器码(x86、ARM、MIPS 等)提升(lift)为统一抽象表示的关键技术。

最后更新:2026-06-16

什么是IR?

IR(Intermediate Representation,中间表示)是二进制分析中将底层机器码(x86、ARM、MIPS 等)提升(lift)为统一抽象表示的关键技术。通过 IR,分析工具可以在一套统一语义上实现数据流分析、污点追踪、符号执行等操作,而无需为每种 CPU 架构重写分析逻辑。IDA 的 Microcode、Ghidra 的 P-Code、angr 的 VEX IR、LLVM IR 都是典型代表。

  • 将不同架构的机器码统一为抽象表示
  • 使跨架构程序分析和反编译成为可能
  • 典型 IR:VEX、P-Code、LLVM IR、BAP BIL

IR详解

IR 的核心价值是「写一次分析,跑所有架构」。原始机器码因架构差异(寄存器数量、指令语义、寻址模式)极难统一处理,IR 通过 Lifting(提升)将复杂指令分解为简单、语义明确的操作序列。例如 x86 的 `add eax, ebx` 在 VEX IR 中会被分解为加法运算 + 标志位更新等多条语句。常见 IR 按抽象层次分:低级 IR(接近机器码,如 VEX/P-Code,保留所有副作用)和高级 IR(接近源码,如反编译器输出的伪 C)。选择 IR 时的权衡:抽象层次越高分析越简单但丢失的细节越多;层次越低保真度越高但分析越复杂。

IR的应用场景

正式定义

将不同 CPU 架构的机器码统一转换为的抽象语义表示,为跨架构程序分析提供统一基础

应用场景

  • 反编译器将汇编提升为可读伪代码
  • 符号执行引擎在 IR 上建模程序语义
  • 跨架构漏洞分析(同一套规则覆盖 x86/ARM/MIPS)
  • 编译器优化在 IR 上进行变换后再生成目标代码

常见误区

  • IR 不是一种真实的机器码——它是分析工具内部使用的抽象表示
  • Lifting 不是完美的——某些复杂指令(如 x86 的 REP 前缀)可能语义丢失
  • 不同工具的 IR 不通用——VEX、P-Code、LLVM IR 各自独立,不能直接互换

实际案例

📌 Ghidra P-Code

Ghidra 将所有支持的架构(x86、ARM、MIPS 等)统一提升为 P-Code,在此基础上进行数据流分析和反编译输出伪 C 代码。新增架构只需写 Lifting 规则。

📌 angr VEX IR

angr 使用 Valgrind 的 VEX IR 作为分析基础,将二进制提升为 VEX 后进行符号执行、污点分析等操作,支持 x86/ARM/MIPS/PPC 等架构。

关于IR的常见问题

IR 在二进制分析中是什么
Intermediate Representation,中间表示。将不同架构的机器码提升为统一的抽象语言,使分析工具可以跨架构工作而无需为每种 CPU 重写逻辑。
常见的二进制 IR 有哪些
VEX(angr/Valgrind)、P-Code(Ghidra)、Microcode(IDA)、BIL(BAP)、REIL(BinNavi)。编译器领域则以 LLVM IR 为主。
Lifting 是什么意思
将机器码「提升」为 IR 的过程。例如将 x86 的 add 指令分解为算术运算 + 标志位更新等多条 IR 语句,使语义完全显式化。

与IR相关的术语

SMT符号执行反编译CFG