Обработка PageFault в гипервизоре

Тема в разделе "WASM.OS.DEVEL", создана пользователем vx1d, 13 дек 2017.

  1. vx1d

    vx1d Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    118
    На некоторой инструкции при обращении к памяти в вм происходит PageFault, код в виртуальной машине должен обработать это событие сам. Т.к. #PF это ловушка, то инструкция не исполняется, а гипервизор получает управление все время на этой инструкции, т.к. он делает vmresume, вм продолжает выполнение с этой же инструкции, которая опять инициирует vmexit и все по-кругу.
    Нужно чтобы гипервизор получил управление, сделал vmresume, чтобы вм сама обработала исключение, как правильно это сделать?
     
  2. vx1d

    vx1d Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    118
    Нашел статью https://www.securitylab.ru/analytics/427855.php
    сделал как там - ловлю #PF, запрещяю vmexit по #PF, выставляю MonitorTrapFlag для выполнения одной инструкции (которая вызвала #PF), делаю vmresume, жду EXIT_REASON_MONITOR_TRAP_FLAG, возвращяю все в исходное состояние
     
  3. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Нет личного опыта ответить самому (но хотелось бы). Отвечаю только ссылкой на гипервизор от Ионеску:
    https://github.com/ionescu007/SimpleVisor
     
  4. vx1d

    vx1d Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    118
    я его видел
    он не обрабатывает эксепшены, только команды