-
-
未解决
基于linux的vt-x,执行vmxoff关闭系统虚拟化时出现segfalut
10雪币
-
发表于:
2024-12-19 21:43
1520
-
未解决 基于linux的vt-x,执行vmxoff关闭系统虚拟化时出现segfalut
10雪币
在Linux上实现vt-x时,执行vmxoff关闭内核虚拟化后,执行流返回用户程序时出现segfault。
通过用户程序调用ioctl向驱动程序发出vt-x的关闭请求。虽然vt-x成功关闭,而且读取到了用户程序的内存(cr3没问题)。

报错的代码位于动态链接库的syscall部分:

经过多次测试发现:如果将vmx的start/stop放在同一个用户程序中执行依次时(可以通过getchar等待),程序正常结束;但是,如果将这两个步骤分开执行(不在同一次运行程序时执行),就会出现segfault错误。此处,host_cr3并不是用户程序的cr3,这是为了实现持久化,参见INTEL CPU虚拟化特性研究&初探 (三)。

进一步地,如果不修复cr3的情况下,如果将start/stop放在一个进程中执行时,程序仍然正确结束(此时的cr3并非是guest_cr3,而是host_cr3,当然此时无法读取到用户程序的内存)???
[培训]科锐逆向工程师培训第53期2025年7月8日开班!