Процессоры х86 имеют два класса команд ограниченного применения: привилегированные команды и чувствительные команды.
Привилегированные команды влияют на системные структуры данных и системные регистры. Они могут использоваться только в программах с CPL = 0. Если процессор обнаруживает привилегированную команду в программе с CPL ¹ 0, то он вызывает обработчик ошибки. В число привилегированных команд входят:
LGDT - загрузка регистра GDTR глобальной дескрипторной таблицы;
LLDT - загрузка регистра LDTR локальной дескрипторной таблицы;
LIDT - загрузка регистра IDTR дескрипторной таблицы прерываний;
LTR - загрузка регистра задачи TR;
LMSW - загрузка слова состояния машины;
SMSW - запоминание слова состояния машины MSW;
CLTS - сброс флага переключения задачи;
MOV x,Cri - операции по записи или считыванию управляющих регистров;
MOV x,Dri - операции по записи или считыванию отладочных регистров;
MOV x,Tri - операции по записи или считыванию регистров тестирования;
HLT - останов.
Чувствительные команды. Существуют команды, использование которых может быть ограничено для программ с уровнем привилегий ниже некоторого уровня привилегий, заданного для всей системы в целом. Кроме того, желательно иметь возможность модифицировать функции некоторых команд в соответствии с привилегиями выполняющей их программы. Такие команды называются чувствительными командами. В частности, при обращении к пространству памяти ввода-вывода пользовательские программы ограничены в использовании команд ввода-вывода IN, OUT, INS, OUTS. Это сделано для того, чтобы пользовательская программа не могла перепрограммировать контроллер прерываний или контроллер прямого доступа к памяти, что, в свою очередь, могло бы открыть путь к непосредственной модификации по физическим адресам. К чувствительным командам также относятся команды CLI, STI, которые воздействуют на флаг IF.
При выполнении этих команд программа не обязательно должна обладать 0 уровнем привилегий. Чувствительность этих команд заключается в том, что их могут выполнять программы, для которых выполняется условие: CPL£IOPL (Поле IOPL в регистре EFlags указывает не текущий уровень привилегий, а минимальный уровень привилегий, необходимый для выполнения чувствительных команд).
Поля IOPL и IF в регистре EFlags являются защищенными. Это означает, что при выполнении операций с регистром флагов, например, при восстановлении его из стека, биты IOPL и IF регистра EFlags меняют свое значение только на 0 уровне привилегий. При попытке изменения EFlags на ненулевом уровне эти поля остаются без изменений.
Защита крупным планом
Для обнаружения и идентификации ошибок процессоры 80х86 фирмы Intel сконструированы со встроенным механизмом защиты. Этой же цели способствует организация памяти, предусматривающая сегментацию и взаимное разделение адресных пространств различных задач с помощью дескрипторных таблиц. В защищенном режиме обычным пользовательским программам запрещены модификация областей памяти, принадлежащих операционной системе, и доступ к областям памяти, выделенным задаче, со стороны других пользователей. При работе в защищенном режиме процессор постоянно контролирует уровень привилегированности текущей программы и следит за тем, достаточно ли она привилегирован, чтобы:
- выполнять некоторые команды;
- обращаться к данным других программ;
- передавать управление в другие сегменты кода.
Механизмы контроля выделенных ограничений составляют основу средств защиты, которые процессор предоставляет в распоряжение разработчиков защищенных систем.
Во всех межсегментных переходах перед тем, как адресовать операнд в памяти, т.е. перед началом цикла обмена, программа загружает селектор в один из сегментных регистров, при этом аппаратным путем выполняется проверка возможности обращения к адресуемому операнду. Процессор перед загрузкой селектора и кэшированием дескриптора в соответствующий кэш-регистр осуществляет несколько проверок. Некоторые из них связаны с контролем уровня привилегий в механизме защиты, а остальные предотвращают загрузку бессмысленных селекторов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.