首页
社区
课程
招聘
vmm获取guest的DR寄存器出现问题,硬件断点
发表于: 2023-5-1 09:49 6684

vmm获取guest的DR寄存器出现问题,硬件断点

2023-5-1 09:49
6684


在vmcs中设置 exception bitmap 拦截 #DB 异常,当调试器执行单步时,vmm可以正确识别到 rflags.TF 被置位从而触发 #DB 异常。

但是当我设置硬件断点时,却出现了问题。

dr0寄存器的值是正确的,该地址设置了硬件断点;rflags.TF 并未置位,表明此异常由硬件断点触发。

但是此时的 Dr6 和 Dr7 值并不正确。。。

Dr6 的值是直接从 vmm 当前环境中读取的(由vm进入vmm,dr6应该并未被修改),Dr7的值通过读取 GUEST_DR7 域获取的,应该没问题啊?



求大牛指点!


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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
2
dr6是你自己控制的,dr7需要开启save/load debug control
2023-5-1 13:11
0
雪    币: 1045
活跃值: (5165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
dr7的问题我已经发现了,但是dr6应该并未修改。如果是这样的话,由硬件断点触发,dr6.B0应该会置位才是。
2023-5-1 13:15
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
4
ALwalker dr7的问题我已经发现了,但是dr6应该并未修改。如果是这样的话,由硬件断点触发,dr6.B0应该会置位才是。
那是因为在Qualification里,那时候还轮不到Dr6
2023-5-1 13:50
0
雪    币: 1045
活跃值: (5165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
意思是dr6置位的操作是在vmm切换到vm时,通过事件注入寻址IDT进行异常处理的过程中由CPU自动完成吗?
2023-5-1 14:07
0
雪    币: 1045
活跃值: (5165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
在 `Exit Qualification for Debug Exceptions` 中捕获到了硬件断点
2023-5-1 14:44
0
雪    币: 12857
活跃值: (9172)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
7
ALwalker 意思是dr6置位的操作是在vmm切换到vm时,通过事件注入寻址IDT进行异常处理的过程中由CPU自动完成吗?
他的意思是vmexit触发的优先级比硬件断点要高,所以进host的时候实际上并没有触发硬件断点。如果你要假装自己触发了硬件断点的话就自己用代码实现一遍硬件里的逻辑吧
2023-5-1 17:48
0
雪    币: 1045
活跃值: (5165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
hzqst 他的意思是vmexit触发的优先级比硬件断点要高,所以进host的时候实际上并没有触发硬件断点。如果你要假装自己触发了硬件断点的话就自己用代码实现一遍硬件里的逻辑吧
非常感谢
2023-5-1 18:04
0
游客
登录 | 注册 方可回帖
返回
//