OSDev

для всех
Текущее время: 29 апр 2024, 01:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Обработка прерываний.
СообщениеДобавлено: 27 фев 2012, 13:33 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
У меня совершенно чайниковский вопрос. Сейчас начал переписывать и понял, что я не знаю:
Как правильно войти в ring3?

Сейчас я использую SYSEXIT, но прерывания так не обработать.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработка прерываний.
СообщениеДобавлено: 27 фев 2012, 14:25 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
Как правильно войти в ring3?

Надо установить CPL=3, других способов нет. А ещё лучше чтобы во всех сегментных регистрах DPL=3.

Цитата:
Сейчас я использую SYSEXIT, но прерывания так не обработать.

Кто сказал?

Цитата:
Чтобы вернуться из процедурного обработчика исключения или прерывания, обработчик должен использовать команду IRET (или IRETD). Команда IRET подобна команде RET за исключением того, что она восстанавливает сохраненные флаги в регистре EFLAGS. Поле IOPL регистра EFLAGS восстанавливается, только если текущий уровень привилегий - 0. Флаг IF изменяется, только если текущий уровень привилегий меньше или равен чем уровень привилегий ввода-вывода (IOPL). Чтобы получить полные описания операций выполняемых командой IRET, то см. Главу 3, “Справочная информация о системе команд A-M", из руководства разработчика программного обеспечения архитектур Intel® 64 и IA-32, Том 2A. Если при вызове процедурного обработчика произошло переключение стека, то команда IRET возвращает исходный стек на место по возвращению.

http://ru.osdev.wikia.com/wiki/IAM:Глава_5


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработка прерываний.
СообщениеДобавлено: 27 фев 2012, 14:40 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Как установить CPL? Ведь при ирете на сегмент с меньшими привилегиями - ГП!

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработка прерываний.
СообщениеДобавлено: 27 фев 2012, 15:40 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
Ведь при ирете на сегмент с меньшими привилегиями - ГП!

Ошибаетесь. Правильная фраза звучит так

Цитата:
IF return code segment selector RPL < CPL
THEN #GP(selector); FI;

Для возврата требуемый уровень ставим RPL=3
Текущий уровень CPL=0.
Условие не выполняется никаких GP нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработка прерываний.
СообщениеДобавлено: 27 фев 2012, 16:00 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
00045748837e[CPU0 ] check_cs(0x0018): non-conforming code seg descriptor dpl != cpl, dpl=3, cpl=0

00045748837e[CPU0 ] check_cs(0x0018): conforming code seg descriptor dpl > cpl, dpl=3, cpl=0

И почему-то CS неправильно сохраняется в стеке (глюк sysexit)?

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработка прерываний.
СообщениеДобавлено: 27 фев 2012, 16:29 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Разобрался, спасибо большое.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB