首页
社区
课程
招聘
vt接管#PF异常时出错,wrmsr,接着系统崩溃
发表于: 2023-5-4 15:00 6615

vt接管#PF异常时出错,wrmsr,接着系统崩溃

2023-5-4 15:00
6615


在进行接管#PF异常时,出现了问题。

在关闭  Execption Bitmap.#PF 位后,wrmsr处理函数正常工作。


【注】测试时,我并没有置位 use_msr_bitmaps。这样一来,vmm将会接管所有读写msr的操作。

如果置位use_msr_bitmaps的话,在没有设置MSR_BITMAP时也可以正常工作,测试将接收不到任何读写msr的操作?但是出现了以下问题。

--------------------------------------------------



当我开启VT时,正常的wrmsr可以正确处理。



但是随后出现了wrmsr的参数非常奇怪,接着系统崩溃。




我查了Intel手册,并没有涉及此编号的msr寄存器。。。


希望大牛指点!



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
所以你接管那些msr干嘛?
2023-5-4 15:13
0
雪    币: 917
活跃值: (4990)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
hzqst 所以你接管那些msr干嘛?
我置位use_msr_bitmaps,照样会出现上图奇怪的msr寄存器编号导致系统崩溃
2023-5-4 16:06
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
你既然要用msrbitmaps你就把MSR_BITMAP好好填上啊,不该捕获的填0,该捕获的填1就完事了
2023-5-4 16:28
0
雪    币: 917
活跃值: (4990)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
问题是出现系统崩溃时的msr参数很奇怪,没有这个编号吧?
2023-5-4 16:34
0
雪    币: 2926
活跃值: (3132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这应该是hyperv用保留msr来通信,而且还有https://www.unknowncheats.me/forum/3425463-post15.html
2023-5-4 17:17
0
雪    币: 917
活跃值: (4990)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
是否出现该报错取决于我是否接管#PF异常
2023-5-4 17:26
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
8
这些属于Synthetic MSR,MSR访问是否造成的vmexit,取决于index是否在合法范围内,0~0x1FFF,0xC0000000~0xC0001FFF之间,如果不在这个区间内,直接产生vmexit,否则取决于bitmap。
2023-5-4 18:55
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
9
Synthetic MSR是提供给虚拟机使用的,不止Hyper-v,Vmware或者Kvm都有自己的。
2023-5-4 18:57
0
雪    币: 917
活跃值: (4990)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
当我开启拦截 #PF 并 设置 PFEC_MASK & PFEX_MATCH 时可以规避掉一些#PF,并且此时并不会出现上边的奇怪msr编号(此时虽然设置了use_msr_bitmaps,但是没有填充 MSR_BITMAP)。这却决于我所设置的过滤规则,比如0x15,用户态的代码引发的缺页异常。
2023-5-4 19:34
0
雪    币: 917
活跃值: (4990)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
ALwalker 当我开启拦截 #PF 并 设置 PFEC_MASK & PFEX_MATCH 时可以规避掉一些#PF,并且此时并不会出现上边的奇怪msr编号(此时虽然设置了use_msr_bitmaps,但是 ...
如果过滤规则过于放松,仍然会引发上述的问题;再者,如果不设置#PF并不会出现上述问题 。感觉是 #PF 拦截引起的,但是又不知道原因。
如果不设置MSR_BITMAP,即该域全部为0,就是在 0-0x1fff, 0xc0000000-0xc000001fff 任何对msr的读写都不会产生 vm-exit?
2023-5-4 19:41
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
12
ALwalker 如果过滤规则过于放松,仍然会引发上述的问题;再者,如果不设置#PF并不会出现上述问题 。感觉是 #PF 拦截引起的,但是又不知道原因。 如果不设置MSR_BITMAP,即该域全部为0,就是在 0-0 ...
msr bitmap可以控制这个范围内的访问是否vmexit,这个范围外的是必然产生vmexit。
2023-5-4 19:59
0
雪    币: 4
活跃值: (664)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你这多半是PF处理部分的问题,好好检查一下寄存器的保存和恢复,以及注入时类型和RIP。
2023-5-5 08:14
0
雪    币: 12
活跃值: (399)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
__forceinline bool IsMicrosoftSyntheticMsr(UINT64 Msr) { return (Msr >> 30) == 1; }
这个只有在虚拟机下才会传递,自己的VM遇到这个VmExit后直接交给上层VMM处理就行。实机的话可以注入个#GP之类的
2023-5-5 13:42
0
游客
登录 | 注册 方可回帖
返回
//