На некоторой инструкции при обращении к памяти в вм происходит PageFault, код в виртуальной машине должен обработать это событие сам. Т.к. #PF это ловушка, то инструкция не исполняется, а гипервизор получает управление все время на этой инструкции, т.к. он делает vmresume, вм продолжает выполнение с этой же инструкции, которая опять инициирует vmexit и все по-кругу. Нужно чтобы гипервизор получил управление, сделал vmresume, чтобы вм сама обработала исключение, как правильно это сделать?
Нашел статью https://www.securitylab.ru/analytics/427855.php сделал как там - ловлю #PF, запрещяю vmexit по #PF, выставляю MonitorTrapFlag для выполнения одной инструкции (которая вызвала #PF), делаю vmresume, жду EXIT_REASON_MONITOR_TRAP_FLAG, возвращяю все в исходное состояние
Нет личного опыта ответить самому (но хотелось бы). Отвечаю только ссылкой на гипервизор от Ионеску: https://github.com/ionescu007/SimpleVisor