есть
размаскированы? и какие именно прерывания?
Все, начиная от irq заканчивая пользовательскими
все перестали работать?... а как контекст переключается? через tss?
Такие прекрасные вопросы, жаль только что единственный ответ "потому"
да ладно, ещё есть как минимум три цензурыных варианта
Неа, просто заменяю данные в регистрах на данные из этого процесса. Ну примитивно, увидел что так делают и решил попробовать
хм... а выход через iret?
так не понятно. а как всё происходит? срабатывает таймер, а потом ничего не срабатывает?
Загружается новое состояние регистров и cpu зависает
что значит зависает?
Вообще нечего не происходит, прерывания не работают, как-то повлиять на него я тоже не могу
Eip перестает меняться
а какая у тебя последняя инструкция перед переключением?
switch_context_asm: cli ;сохраняю состояние регистров call switch_context ;загружаю состояние регистров sti iret
у тебя протектед мод?
так там есть специальный тип гейта который при входе отключает прерывания за тебя
а перед возвратом ты адрес возврата меняешь?
Так он в стеке остаётся
а как ты тогда меняешь контекст? контекст же это не только регистры, но и указатель команд
Так после вызова irq0 в стеке адрес возврата остаётся. Я и cr3 гружу
так ты этот адрес должен заменить на адрес из другого контекста
Так он же в стеке лежит
так там и меняй
Обсуждают сегодня