Page 113 - 《软件学报》2024年第6期
P. 113
谢汶兵 等: 二进制翻译技术综述 2689
节简述二进制翻译技术基本原理, 然后从不同角度对二进制翻译技术做分类, 并梳理二进制翻译发展历史上具有
重要突破的典型系统. 第 2 节总结二进制指令翻译方法, 将翻译方法划分为定制化中间表示的指令翻译、编译器
框架辅助的指令翻译、规则匹配的指令映射翻译. 第 3 节总结二进制翻译技术面临的一些关键问题, 包括存储单
元映射、原子操作时序维护、异常和中断处理、内存一致性保证等. 第 4 节讨论二进制翻译优化技术, 重点从翻
译开销优化、运行时优化和代码生成优化总结二进制翻译常用的优化方法. 第 5 节归纳二进制翻译技术的典型应
用领域, 例如软件迁移、程序分析与优化、二进制符号执行等. 第 6 节对二进制翻译技术的潜在研究方向进行展
望. 第 7 节对全文工作进行总结.
1 二进制翻译技术与典型系统
1.1 二进制翻译技术基本原理
严格来说, 二进制翻译技术有狭义和广义之分. 狭义的二进制翻译技术是指二进制翻译器本身, 主要功能是实
现源平台 (程序被翻译之前的运行平台, 也叫源机器平台或客户平台) 程序指令到目标平台 (程序被翻译之后的运
行平台, 也叫目标机器平台或宿主平台) 指令的等价翻译; 广义的二进制翻译技术则是一个复杂的翻译系统, 其包
二进制翻译技术根据其输入的翻译对象、运行的翻译平台、选取的翻译时机等不同, 我们从不同角度对其进
含了指令翻译、运行环境模拟、目标代码执行、性能优化、异常处理等环节. 广义的二进制翻译全面地描述了程
序模拟过程. 本文讨论的二进制翻译特指广义的二进制翻译技术.
图 2 给出了典型的二进制翻译系统基本框架图, 核心模块包括程序加载、二进制翻译器、控制器、运行环境
模拟、目标代码执行等. 程序加载负责启动整个翻译系统, 并将源程序代码加载到内存. 二进制翻译器负责指令的
翻译、优化、代码缓存等工作. 控制器负责翻译和执行之间的控制流切换、缓存代码的更新与查找等. 运行环境
模拟负责系统调用、异常处理、存储单元镜像等模拟工作. 目标代码执行则是在目标机器上执行翻译后代码. 总
结看来, 二进制翻译技术的执行流程如下: 首先, 在目标机器平台加载源机器平台的二进制程序, 并启动二进制翻
译器. 其次, 二进制翻译器根据源程序代码逻辑进行解码、翻译、优化以及编码等指令翻译工作. 最后, 在目标平
台执行翻译生成的二进制代码.
源平台
二进制代码
解码
二进制 翻译
代码翻译 程序加载 翻译器 优化
编码
运行环境
运行时维护 控制器
模拟
目标平台 数据流
代码执行 代码执行 二进制代码
控制流
目标平台
图 2 二进制翻译系统基本框架图
1.2 二进制翻译技术分类
行分类.
(1) 根据翻译对象不同分类, 分为系统级翻译和用户级翻译. 系统级翻译的翻译对象是被翻译程序所在的整个
系统, 相当于在目标平台模拟一套与源平台完全相同的运行环境. 翻译过程涉及对系统中所有进程、内存单元、
外设、系统调用等全部环境的模拟, 通常翻译效率较低. 事实上, 对于大多数应用来说, 二进制翻译过程只需聚焦
于应用程序本身, 其运行的环境可以直接依赖于宿主机操作系统, 由此便衍生出了用户级翻译. 用户级翻译流程简
单, 通常翻译效率较高.