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 中进程视图的自省结果,限于篇幅,