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

Discussion in 'WASM.OS.DEVEL' started by vx1d, Dec 13, 2017.

  1. vx1d

    vx1d Member

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

    vx1d Member

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

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

    Blog Posts:
    0
    Нет личного опыта ответить самому (но хотелось бы). Отвечаю только ссылкой на гипервизор от Ионеску:
    https://github.com/ionescu007/SimpleVisor
     
  4. vx1d

    vx1d Member

    Blog Posts:
    0
    я его видел
    он не обрабатывает эксепшены, только команды