Page 134 - 《软件学报》2024年第6期
P. 134

2710                                                       软件学报  2024  年第  35  卷第  6  期


                 供了一个平面内存模型的抽象, 在          GPU  上自动交错底层虚拟机的地址空间, 为           GPU  加速提供了新的机会.

                 5.3   二进制符号执行

                    符号执行作为一种强大的软件分析和错误检测技术, 根据处理对象不同可以分为两种: (1) Source-based                         符号
                 执行. 在源代码可用的前提下, 利用编译器将其编译为                IR  后再植入符号执行信息; (2) Binary-only  符号执行. 对于
                 源代码不可用的二进制程序, 利用二进制翻译将其变换为                   IR  后再植入符号执行信息. 然而, 在实际情况中大多数
                 程序不提供源代码, 基于       Binary-only  二进制符号执行被广泛使用.
                    Shoshitaishvili 等人  [194] 提出符号执行翻译器  Angr, 它基于  VEX IR  对关键符号信息插桩并符号化解释执行,
                 对于不带符号的代码采用具体执行方式. Angr 具有较强的通用性, 但执行速度较慢. 为了将                         Source-based  符号执
                 行系统   KLEE  扩展到第三方依赖库和操作系统内核, Chipounov           等人  [195] 创建了  S2E  系统. S2E  使用  QEMU  将目
                 标程序从二进制转换为        TCG IR, 之后将包含符号信息的        TCG IR  进一步转换为   LLVM  字节码并传递给      KLEE, 最
                 后使用   KLEE  符号化解释执行. S2E    相比于   Angr 的设置和运行更复杂, 但程序分析范围更加全面. 不足的是, S2E
                 与  Angr 的性能均较差. QSYM    [196] 作为一个高性能的二进制符号执行工具, 利用动态二进制翻译技术将符号执行
                 与本地原生执行紧密集成, 实现更细粒度、更快的指令级符号分析与执行. QSYM                         不再依赖目标程序的        IR  做符
                 号插桩, 而是直接基于指令级进行符号插桩与翻译, 相较于基于                    IR  的符号执行具有更强的鲁棒性. 然而, QSYM
                 面向  x86  指令集设计, 迁移到其他架构难度较大.
                    Poeplau  等人提出一种   Source-based  的符号执行器  SYMCC [197] , 它在程序源代码的编译阶段插入符号信息. 实
                 验结果表明, SYMCC     的执行性能相比于       QSYM  可以提升两个数量级, 但       SYMCC  基于源码编译插桩的设计方法
                 限制了其面向二进制文件的分析使用. 受             SYMCC  启发, SymQEMU  [30] 关注如何实现基于编译的符号执行在二进
                 制文件上工作. SymQEMU      将二进制翻译和符号执行充分融合, 基于             QEMU  设计了面向二进制的符号分析工具,
                 通过插桩    TCG IR  中间代码来建立符号约束表达式. 与            Anger 和  S2E  相比, SymQEMU  的执行效率更高. 与
                 QSYM  相比, SymQEMU  在保持高效的同时具有平台可扩展性. 此外, 测试结果表明                  SymQEMU   在执行效率和测
                 试覆盖率方面优于       SYMCC 技术. 表  9  给出了上述基于二进制翻译的符号执行工具的对比情况.

                                            表 9 基于二进制翻译的符号执行工具对比
                                     利用动态二进制翻译技术实现了
                      工具        实现语言         IR类型       执行效率       支持多平台       基于二进制程序        跨平台执行
                     Angr [194]  Python       VEX          低          √             √             √
                     S2E [195]   C/C++     TCG & LLVM      低          √             √             √
                    QSYM [196]    C++          无           高          ×             √             ×
                    SYMCC [197]   C++        LLVM          高          √             ×             ×
                   SymQEMU [30]  C/C++        TCG          高          √             √             √

                 5.4   虚拟化
                    虚拟化技术可以在一个特定的抽象层中, 使用下层系统提供的接口为上层系统实现约定接口的功能. 虚拟化
                 技术被应用于子系统、组件以及整个计算机系统. 二进制翻译本身作为一种虚拟化技术, 其在虚拟化应用中被广
                 泛采纳.
                    VMware 虚拟平台    [198]                       x86  架构  CPU  的完全虚拟化, 允许多个操作系统环境
                 在  x86  的  PC  机上并发运行. Transmeta 公司推出的  Crusoe 微处理器  [4] 采用软硬件协同设计的二进制翻译技术实
                 现指令集虚拟化. Cota 等人     [15] 提出了基于动态二进制翻译的跨指令集多线程模拟器                Pico, 它可以在保持速度、可
                 移植性和正确性的同时, 在多核主机上高效的模拟多核客户机, 支持                     64  核的全系统虚拟化. QEMU     在虚拟化中被
                 广泛使用, 可以提供对多种源平台的虚拟支持. 著名的                KVM [199] 和  Google Android [186] 等模拟器均是基于  QEMU  的
                 二次开发实现.
                    Wang  等人  [19] 结合龙芯  GS464E  处理器和  QEMU  二进制翻译融合, 实现了软硬件融合的访存虚拟化优化.
                 Huang  等人  [90] 利用二进制翻译技术提出了一种名为        BTMMU  的跨  ISA  内存虚拟化方法. Spink   等人  [9] 利用二进制
   129   130   131   132   133   134   135   136   137   138   139