Page 115 - 《软件学报》2024年第6期
P. 115
谢汶兵 等: 二进制翻译技术综述 2691
ExaGear [12] 是华为开发的动态二进制翻译系统, 实现了 x86、x86-64、ARM 程序在 ARM64 平台的翻译运行.
ExaGear 通过构建快速翻译+热点代码深度优化策略. 采用 Trace 优化减少间接跳转查找开销, 有效地改善了内存
布局和数据局部性, 充分发挥了鲲鹏的多核优势.
Instrew [14,38] 是一个客户端+服务端的多进程二进制翻译和二进制插桩框架. 相比于其他类似框架, Instrew 具有
以下优势: (1) 基于函数级粒度的翻译并且支持 SIMD (single instruction multiple data), 对浮点指令的翻译效率较
高. (2) 被提权的中间表示与 LLVM IR 兼容, 可以复用 LLVM 代码框架. (3) 多进程的设计方法将翻译和执行部署
在不同进程. 然而, Instrew 对 x86 指令集、浮点异常以及舍入模式支持不足.
[5]
Rosetta 2 是苹果公司开发的商用二进制翻译系统, 实现了 x86-64 应用在 ARM64 平台上的翻译运行. Rosetta 2
采用动静结合的代码翻译方法, 同时在 ARM64 硬件上支持英特尔架构的内存模型, 提升了对并发程序的翻译
效率.
FEX-Emu [39] 是一套从 x86 和 x86-64 到 AArch64 的开源二进制翻译框架, 致力于实现 Steam 和 Linux/x86-64
游戏在 AArch64 平台上高效运行. FEX-Emu 基于 JSON 格式的 IR (intermediate representation) 中间表示, 支持将
库函数调用转发到主机 OpenGL 驱动程序和其他组件中.
2001 IA-32, IA-64, MSIL IA-32, IA-64, MSIL
Houdini [40] 实现了 Android/ARM 应用在英特尔处理器上的高效翻译运行. Houdini 使用复杂的动态指令生成
机制进行性能优化, 这使得翻译生成的指令极难精确与原生 ARM 指令映射.
LAT [17] 是由龙芯中科开发的一套支持多平台翻译的动态二进制翻译系统, 实现了 x86、ARM、MIPS 应用在
LoongArch 上高效翻译运行. LAT 通过软硬协同设计的方法提升二进制翻译效率, 为上层应用软件提供了良好的
虚拟运行环境.
Lasagne [41] 静态二进制翻译器实现了一套支持并发推理的强弱内存一致性变换模型. Lasagne 基于 LLVM 框
架设计实现, 为不同内存模型处理器之间的并发二进制程序翻译与形式化验证提供了重要参考价值.
除了上述翻译系统, 还存在着大量其他著名的二进制翻译系统, 例如中科院计算所的 DigitalBridge [42] 、面向
全系统翻译的 Captive 以及基于“复制-再插桩”的 DynamicRIO [43] 同源二进制插桩与分析工具等. 本文梳理了二进
[9]
制发展历史上具有重要技术突破的典型翻译系统, 同时我们重点关注最近 10 年的研究工作, 最终总结出如表 1 所
示的典型二进制翻译系统列表.
表 1 典型二进制翻译系统
翻译 文献 年份 源平台 目标平台 类型 技术特点
类型
Shade [44] 1994 SPARC, MIPS SPARC D 指令缓存和Trace优化
DAISY [6] 1997 RS/6 000 VLIW D 实现指令并行化, 解决了内存一致性问题
FX!32 [1] 1998 IA-32 Alpha H 首次将环境模拟、剖析数据生成和二进制翻译结合
BOA [7] 1999 PowerPC VLIW D 硬件支持的精确异常处理, 乱序执行提升指令并行度
Aries [2] 2000 PA-RSIC IA-64 D 支持浮点寄存器映射, 对系统调用直接映射
Strata [22] 2001 SPARC/MIPS/ SPARC/MIPS D 多线程翻译, 提供丰富接口函数支持功能扩展
IA-32
用户 Vulcan [45] H 支持静态和动态代码修改, 支持跨组件分析与优化
级翻 [46]
译 Bintrans 2002 PowerPC Alpha D 不使用中间表示, 人工分析源平台可执行文件
Walkabout [47] 2002 SPARC v8 SPARC v8 H JVM, 解释执行
基于VEX IR中间表达式转换, 重量级代码插桩与分
[16]
Valgrind 2003 多架构支持 多架构支持 D
析工具
DigitalBridge [42] 2004 x86 MIPS H 内建解释执行模块, 间接转移和标志位处理较优
DynamoRIO [43] 2004 PA-RISC, IA-32 PA-RISC, IA-32 S 代码缓存、块链接、Trace构建等优化
QEMU [13] 2005 多架构支持 多架构支持 D 注册加载器钩子执行不同架构
IA-32 EL [3] 2006 IA-32 IA-64 D 支持SIMD指令, 支持热路径优化