首页
社区
课程
招聘
未解决 基于linux的vt-x,执行vmxoff关闭系统虚拟化时出现segfalut 10雪币
发表于: 2024-12-19 21:43 1520

未解决 基于linux的vt-x,执行vmxoff关闭系统虚拟化时出现segfalut 10雪币

2024-12-19 21:43
1520

在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日开班!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
ubuntu-kernel/arch/x86/kvm/vmx/vmx.c 有你要的
2025-2-2 22:05
0
雪    币: 7319
活跃值: (3421)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
3
我理解的是,你想在host里面读取guest里面用户层的数据?如果是想这么搞,你需要直接把guest cr3 直接mov到当前的cr3,这样,你读取的用户层地址才会有效。
2025-2-6 11:18
0
游客
登录 | 注册 方可回帖
返回