Я столкнулся с ошибкой при тестировании некоторого кода, который генерировал ошибки защиты. У меня был настроен обработчик исключений, так что он ожидал, что EIP и стек не изменятся, стандартное поведение на собственном ЦП. Но в QEMU и ESP, и EIP изменяются во время генерации ошибки.
ОС 32-битная, поэтому случай ошибки связан с выходом из сегмента CS. Копаясь в коде QEMU, кажется, что EIP и ESP устанавливаются после вызова raise_exception_error внутри helper_ret_protected. Итак, я не могу понять, почему я вижу другое поведение гостя.
Я не понимаю, как QEMU генерирует исключения, есть ли еще один шаг, который происходит после вызова методов ret_protected?