КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Проверка привилегий
Проверка типа сегмента 1. Загрузка селектора (и дескриптора) в регистр: • в CS можно загрузить только сегмент кода; в DS, ES, FS, GS можно загрузить только селектор сегмента данных, сегмента кода, доступного для чтения, или нулевой селектор; в SS можно загрузить только сегмент данных, доступный для записи; в LDTR можно загрузить только сегмент LDT; в TR можно загрузить только сегмент TSS. 2. Обращение к памяти: • никакая команда не может писать в сегмент кода; никакая команда не может писать в сегмент данных, защищенный от записи; никакая команда не может читать из сегмента кода, защищенного от чтения; нельзя обращаться к памяти, если селектор в сегментном регистре нулевой. 3. Исполнение команды, использующей селектор в качестве операнда: • дальние CALL и JMP могут выполняться только в сегмент кода, шлюз вызова, шлюз задачи или сегмент TSS; команда LLDT может обращаться только к сегменту LDT; команда LTR может обращаться только к сегменту TSS; команда LAR может обращаться только к сегментам кода и данных, шлюзам вызова и задачи, LDT и TSS; команда LSL может обращаться только к сегментам кода, данных, LDT и TSS; элементами IDT могут быть только шлюзы прерываний, ловушек и задач. 4. Некоторые внутренние операции: • при переключении задач целевой дескриптор может быть только TSS или шлюзом задачи; при передаче управления через шлюз сегмент, на который шлюз указывает, должен быть сегментом кода (или TSS для шлюза задачи); • при возвращении из вложенной задачи селектор в поле связи TSS должен быть селектором сегмента TSS. Все неравенства здесь арифметические, то есть А > В означает, что уровень привилегий А меньше, чем В: • при загрузке регистра DS, ES, FS или GS должно выполняться условие: DPL >= max(RPL,CPL); при загрузке регистров SS должно выполняться условие: DPL = CPL = RPL; при дальних JMP, CALL, RET на неподчиненный сегмент кода должно выполняться условие: DPL = CPL (RPL игнорируется); при дальних JMP, CALL, RET на подчиненный сегмент кода должно выполняться условие: CPL >= DPL. При этом CPL не изменяется; при дальнем CALL на шлюз вызова должны выполняться условия: CPL =< DPL шлюза, RPL =< DPL шлюза, CPL >= DPL сегмента; при дальнем JMP на шлюз вызова должны выполняться условия: CPL =< DPL шлюза, RPL =< DPL шлюза, CPL >= DPL сегмента, если он подчиненный, CPL = DPL сегмента, если он неподчиненный. При вызове процедуры через шлюз на неподчиненный сегмент кода с другим уровнем привилегий процессор выполняет переключение стека. В сегменте TSS текущей задачи всегда хранятся значения SS:ESP для стеков уровней привилегий 0, 1 и 2 (стек для уровня привилегий 3, потому что нельзя выполнять передачу управления на уровень 3, кроме как при помощи команд RET/IRET). При переключении стека в новый стек помещаются, до обратного адреса, параметров (их число указано в дескрипторе шлюза вызова), флагов или кода ошибки (в случае INT), старые значения SS:ESP, которые команда RET/IRET использует для обратного переключения. То, что надо выполнить возврат из процедуры, RET определяет так: RPL селектора, оставленного в стеке, больше (менее привилегированный), чем CPL. Даже если операционная система не поддерживает многозадачность, она должна оформить сегмент TSS с действительными SS:ESP для стеков всех уровней, если она собирается использовать уровни привилегий.
Дата добавления: 2014-01-05; Просмотров: 429; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |