背景
技术路径 LLVM Pass 结构 → IR 操作 API → 修改分支与状态机注入逻辑 的深度解析,以 OLLVM 控制流平坦化为例,结合源码实现细节:
一、LLVM Pass 结构:混淆的编译器扩展基础
Pass 是 LLVM 的核心理念,用于在编译过程中分析和修改代码。OLLVM 通过自定义 Pass 注入混淆逻辑。
1. Pass 类型与注册
- FunctionPass(函数级操作)
OLLVM 的混淆 Pass 大多继承自FunctionPass
(如FlatteningPass
),在遍历函数时执行混淆。 - 注册机制
通过RegisterPass
宏将 Pass 插入编译流水线:// 文件:lib/Transforms/Obfuscation/Flattening.cpp char Flattening::ID =