-
-
[求助] vt在接管中断时,想要自定义处理中断时,只有通过hook idt吗?
-
发表于:
2023-4-30 10:49
6819
-
[求助] vt在接管中断时,想要自定义处理中断时,只有通过hook idt吗?
如标题,比如我配置 `Exception Bitmap` 拦截 #DB 异常时,当测试程序执行 `popf` 指令置位 rflags.TF 时,执行流陷入vmm。
如果我想让 #DB 异常不在内核异常处理派发函数中进行派发(不让调试程序接管异常),简单的在vmm的处理函数中清除 guest rflags.TF 位,以为在resume后由于TF位被清除而导致程序继续执行。但是在实际执行时,在返回vm后程序始终会按照单步每执行一条指令后都会触发 #DB 异常。
我猜想是由于陷入vmm前的CPU处于单步模式,即使在vmm处理函数中清除 guest rflags.TF 位就像内核 _KiTrap01中清除TF位一样,而不影响触发异常的程序(内核异常处理程序在 iret 返回前会将栈帧中的 rflags.TF/RF 置1)。
在返回guest时,CPU仍处单步调试状态???为什么清除TF位没有生效?或者是置位RF依然无效。。。
如果通过 hook idt 动作太大,通过内存页读写分离实现?
有没有什么好的方法?
希望各位大牛指点以下!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!