Page 331 - 《软件学报》2021年第10期
P. 331

陈兴蜀  等:VMOffset:虚拟机自省中一种语义重构改进方法                                                3303


                 而获取 pid 成员的偏移量则还依赖 tasks  offset 遍历进程链表,得到所有进程 pf 偏移处的内容进行对比.因此,
                 VMOffset 需基于成员自身属性与各个成员之间的相互联系,依次获取所需成员对应的偏移量.



























                                           Fig.8    Algorithm of filtrating end_code offset
                                                图 8   end_code offset 筛选算法

                 3    实验及结果分析

                    本节从功能及性能两个方面对 VMOffset 进行评测.功能测试用于验证 VMOffset 的有效性,即:能否屏蔽
                 TVM 内核版本的差异性,自动获取其进程偏移量,并基于此实现语义重构.性能测试用于验证 VMOffset 对 TVM
                 的性能影响.VMOffset 基于 KVM-QEMU 虚拟化平台实现,实验环境如下:宿主机为 Intel(R) Core(TM)  i3-4160
                 双核 CPU,主频为 3.60GHz,物理内存为 4GB,支持硬件辅助虚拟化.操作系统为 64 位 CentOS7,内核版本 3.10.1,
                 KVM 版本 kvm-kmod-3.10.1,QEMU 版本 Qemu-2.3.0.

                 3.1   功能测试
                    为验证 VMOffset 的内核版本无关性,部署了不同内核版本操作系统的 TVM,见表 2.
                                       Table 2    Environment configuration of virtual machine
                                                   表 2   虚拟机环境配置
                                      虚拟机           位数          操作系统          内核版本
                                       VM1           64         CentOS6.5      2.6.32
                                       VM2           32        Ubuntu12.04    3.2.0-24
                                       VM3           64         CentOS7        3.10.0
                                       VM4           64        Ubuntu14.04    4.4.0-31
                    实验中,TVM 的内核版本不同,对应的进程偏移量也不同.以成员 pid 的偏移量为例,CentOS6.5 中为 1 192,
                 Ubuntu12.04 中为 516,CentOS7 中为 1 188,Ubuntu14.04 中为 1 064.在上述 TVM 内核版本未知的前提下,
                 VMOffset 均能自动获取其进程偏移量,所得偏移量可提供给自研或开源 VMI 应用程序完成语义重构.为说明
                 VMOffset 对开源 VMI 工具的支持与兼容,本节以 VM2 为例,将 VMOffset 所得进程偏移量提供给 Libvmi,完成
                 虚拟机自省过程.Libvmi 是一款具有代表性的开源 VMI 工具,专注于读写虚拟机内存,但其需要在 TVM 中加载
                 内核模块获取进程偏移量,并将其手动写入配置文件中.本节将 VMOffset 所得进程偏移量提供给 Libvmi,使其
                 无需进行手动获取及配置的操作.图 9 所示为 VMOffset 结合 Libvmi 对 TVM 中进程视图的自省结果,限于篇幅,
   326   327   328   329   330   331   332   333   334   335   336