Проверка уровней привилегий


0 – уровень имеет больше всего доступа, предназначен для ядра ОС, 1 и 2 – для окружения ОС (драйверов), 3- для прикладных ПО

При попытке доступа к уровню, который не имеет сегмент процессор генерирует ошибку.

CPI – уровень привилегий текущей программы, хранится в CS и SS

DPL- уровень привилегий сегмента или шлюза

Хранится в поле DPL дескриптора

КЗД – запрашиваемый уровень привилегий располагается в сегментном регистре, используется с СPL, для определения имеет ли программа право доступа к какому либо сегменту.

Для сегмента данных: DPI – показ наивысшее уровень привилегии, который должен иметь кодовый сегмент для доступа к сегменту данных.

Шлюз: DPL интерпретирует как у данных.

Для кодовых сегментов: не конформный (С=0) к данному кодовому сегменту могут обратиться только более привилегированные сегменты, конформный (С=1) доступ могут иметь сегмент, уровень привилегий которого меньше, чем у текущего кодового сегмента.

Проверка уровней привилегий

Рисунок 1. Проверка уровней привилегий при доступе к сегменту данных.

Под сегментом данных подразумевается DS, ES, FS, GS, сегмент стека SS.

Чтобы получить доступ к сегменту данных, необходимо в селектор загрузить сегмент. Процессор, перед тем как загрузить селектор, производит проверку уровня привилегий: проверяется значение в регистре CS.

clip_image004

Процессор загружает селектор в том случае, если DPl дескриптора сегмента имеет больше либо равен числовому значению, чем текущий уровень CPL и запрашиваемый уровень RPL привилегий. Иначе генерируется ошибка общей защиты (#GP).

Доступ к данным в кодовом сегменте: 3 способа. Загрузка регистра сегмента данных с селектором сегмента кода Дескриптор должен быть с атрибутом некомфортный, читаемый, кодовый сегмент. Загрузка регистра сегмента данных с селектором сегмента кода с атрибутом конформный, читаемый, кодовый. Использование сегмента CS.

Доступ к данным стека. DPL=CPl=RPL- только при этом условии.

Проверка уровня привилегий при передаче управления между кодовыми сегментами. Используются команды вызова процедур CALL, JMP. Команды JMP,CALL могут обратиться к другим кодовым сегментам следующими способами: Операнд команды содержит селектор требуемого сегмента, Операнд указывает на шлюз, который содержит селектор требуемого сегмента, Операнд указывает на шлюз значение, которого указывает на дескриптор состояния значение, которого содержит селектор требуемого сегмента.

Загрузка...