Sysenter: почему не сносит стек?

Тема в разделе "WASM.NT.KERNEL", создана пользователем Awk, 14 авг 2007.

  1. Awk

    Awk New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    8
    Подумалось тут.
    Команда sysenter не запрещает прерывания <edit: вообще не трогает флаги, кроме VM>, а windows-овский хандлер ее запрещает прерывания не сразу.
    Вопрос: пусть имеется следующая последовательность действий:
    1) App1 вызывает sysenter
    2) До сброса IF приходит прерывание и происходит переключение контекста на App2
    3) App2 тоже вызывает sysenter
    4) Так как команда sysenter берет значение ESP из MSR, который всегда одинаковый на каждом процессоре <edit:независимо от потока> (проверял), то App2 затрет стек App1, в результате чего App1 успешно грохнется.
    5) Этого не происходит. Почему?

    NB. Похожая вещь происходит, если попытаться потрейсить точку входа sysenter-а. В случае, если в нашем хандлере int1 разрешаются прерывания, рано или поздно стек портится. <edit: использованный мной хандлер int1 далеко не уходит, т.к. не восстанавливает TF>
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А у меня в интеловском мане написано что запрещает:

     
  3. Awk

    Awk New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    8
    Спасибо, ясно. В начале описания команды про это не написано, а дальше я читать поленился :dntknw: