December 17 2017 04:16:38
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
Формат дескриптора шлюза
ФОРМАТЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ И ВЫПОЛНЕНИЕ ОПЕРАЦИЙ

При вызове программ через шлюз должны выполняться следующие правила.

•  Значения RPL селектора, вызывающего шлюз, и CPL текущей программы должны быть меньше или равны значению gDPL в байте доступа шлюза. Таким образом, дескриптор шлюза должен иметь такой же или меньший уровень привилегий, чем запрос и текущая программа: gDPL >= (RPL.CPL).

•  Значение gDPL шлюза вызова должно быть больше или равно уровню DPL вызываемого сегмента программ: gDPL >= DPL.

•   Вызываемый сегмент программ должен иметь такой же или более высокий уровень привилегий DPL, чем текущая программа: DPL <= CPL.

•  Последнее из перечисленных правил реализуется при выполнении команды CALL с обращением к любым видам сегментов программ (подчиненным и неподчиненным) и команды JUMP, вызывающей подчиненный сегмент. Если команда JUMP осуществляет переход к неподчиненному сегменту программ, то необходимо выполнение правила DPL = CPL-При вызове программ через шлюз должны выполняться следующие правила.

•  Значения RPL селектора, вызывающего шлюз, и CPL текущей программы должны быть меньше или равны значению gDPL в байте доступа шлюза. Таким образом, дескриптор шлюза должен иметь такой же или меньший уровень привилегий, чем запрос и текущая программа: gDPL >= (RPL.CPL).

•  Значение gDPL шлюза вызова должно быть больше или равно уровню DPL вызываемого сегмента программ: gDPL >= DPL.

•   Вызываемый сегмент программ должен иметь такой же или более высокий уровень привилегий DPL, чем текущая программа: DPL <= CPL.

•   Последнее из перечисленных правил реализуется при выполнении команды CALL с обраще­нием к любым видам сегментов программ (подчиненным и неподчиненным) и команды JUMP, вызывающей подчиненный сегмент. Если команда JUMP осуществляет переход к неподчиненному сегменту программ, то необходимо выполнение правила DPL = CPL.

Примеры реализации этих правил при различных комбинациях значений RPL, CPL, gDPL, DPL иллюстрируются на рис. 2.50.

Если эти правила выполняются, то после вызова дескриптора шлюза в сегментный регистр CS загружается селектор - байты 3,2 этого дескриптора. Этот селектор выбирает из LDT дескриптор вызываемого сегмента программы. При этом младшие два бита (поле RPL) селектора игнорируются, а вместо них в регистр CS в качестве CPL заносится значение DPL из дескриптора вызываемого сегмента. В регистр EIP из дескриптора шлюза загружается относительный адрес входа в программу-байты 0,1,6,7 (для программ процессора 80286 в IP загружаются байты 0,1).

Если вызванная программа имеет другой (более высокий) уровень привилегий, чем текущая, то при выполнении команд JMP, CALL с использованием шлюза вызова производится переключение стека. Выполняется обращение к стеку, организованному для программ с уровнем привилегий, соответствующим уровню вызванной программы. В этот стек последовательно вводятся старые значения SS и ESP; параметры, переносимые из старого стека; старые значения CS и EIP. Число переносимых параметров определяется полем WC (см. рис. 2.49), причем выбираются последние из загруженных в старый стек параметров. Последующие ячейки стека используются для хранения новых параметров. Переключение стека производится автоматически путем загрузки в регистры SS и ESP из сегмента состояния задачи TSS нового содержимого, которое определяет начальный адрес стека для программ данного уровня привилегий.

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

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.04 секунд 2,298,803 уникальных посетителей