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指令, 支持热路径优化
   110   111   112   113   114   115   116   117   118   119   120