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

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

2023-5-1 09:49
5859


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

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

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

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

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



求大牛指点!


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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