VMM利用MTF实现单步调试
bammo 2016-07-23 07:46:33 简单介绍一下问题背景:在VMM中利用EPT将指定页面的访问权限设置成不可写,当有进程(或内核模块)对页面进行写操作时,将产生VM Exit陷入VMM,在VMM中进行相应处理后,退回guest,允许该写操作的执行(即将页面访问权限设置为可写);同时为了下次写操作时能继续陷入,需要将指定页面的访问权限重置为不可写。
为了达到重置EPT访问权限的目的,我打算利用MTF来实现VMM的单步调试,当将mtf标志位置1时,guest每执行一条指令后,都会产生一个MTF VM exit而陷入VMM,在此时机可重新将页面权限设置成不可写。在此期间遇到两个问题:
(1)客户机因EPT-Violation陷入VMM时,指令寄存器RIP指向当前正在执行的指令,还是当前指令的下一条指令?
(2)一次对指定页面的写操作触发的EPT-violation,按照上面的描述过程,按理说,执行过程如下(EPT-violation->处理,赋予写权限->返回客户机执行写指令->mtf vm exit->取消写权限->结束)。然而实际却会会持续陷入VMM,而每次陷入时RIP指令寄存器存储的指令地址都是相同的,该写操作一直在执行。请问实际和理论的出入是为什么?
希望大神能帮我解答下~