第二个问题已经知道原因了是锁核心的方法不对。
第一个问题仍然研究中……
代码里的IntHandler是错的。有一些异常cpu压入了faultcode没有平衡堆栈。

原文
//////////////////////
这个暑假有点时间,借助于hyperdbg的源代码,学习了一下VT。就想自己写个基于VT技术的调试器玩玩的。原理上很简单,我们的调试器是主机(HOST),把当前的操作系统放进虚拟机里运行(GUEST),然后调试器可以拦截感兴趣的一些异常。

结果搞了几个星期了单步这个都没搞定啊,真挫。技术太次,以前都没接触过内核调试器这方面,我把代码放出来大家围观一下好了。如果有强人来看到了还望指点啊!!感谢啊~!



这个基本框架是有了,界面山寨了SoftICE,哦SoftICE我的最爱,可惜你只能在vmware里跑……

我说一下遇到的问题。主要是缺页异常的问题。有2点。



第一个是这样的,VM退出返回到HOST处理函数_ExitHandler,我用cli把中断给关了,如果sti打开中断的话,系统直接死机了,我把HOST机的256个IDT全都设置空函数也会死…为什么呢??

关了中断之后,在_ExitHandler访问被换出的分页内存就悲剧了啊,交给windows处理的话,会直接蓝屏IRQL_NOT_LESS_OR_EQUAL(IRQL=255)。

怎么会访问分页内存呢,是这样的,如果我们调试的是一个运行在应用层的程序,代码段缺页经常发生…我们要读EIP指向的代码反汇编显示到调试器界面上,这一读就缺页异常了…




第二个问题,单步执行指令的时候,如果客户机中断是开着呢。单步一段时间后系统就死掉了,我觉得是因为发生了任务切换,但是为什么会死机啊?!不应该死机吧?如果我在单步前把中断关了,就不会死,但是把中断关了缺页了肿么办啊~客户机蓝屏了啊~!



具体看压缩包里面的源代码,关键的几个部分我都注释了



上传的附件 vmxice.rar