Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БІКС 2015_1 / Лек 6 Захист інформації на рівні операційної системи.doc
Скачиваний:
76
Добавлен:
12.02.2016
Размер:
3.66 Mб
Скачать

10. Порівнюються cpl, rpl і dpl:

CPL * 0, RPL = З

П. Якщо DPL < 3, фіксується недостатній рівень привілеїв (помилка 13).

Селектор із регістра ах завантажується в регістр ds, тоді ж дескриптор d заван­тажується в дескрипторний регістр, що відповідає регістру ds.

Звернення до пам'яті

Під час звернення до пам'яті у разі її сегментного розподілу перевіряється, чи дозволено операцію та чи коректно здійснено доступ. Обмеження для команди зчитування з пам'яті встановлено лише для сегментів коду (біт Е - 1): якщо біт

R ш 0 - читання заборонено. Для команди записування в пам'ять сегмент коду — взагалі несумісний тип, а всі інші типи сегментів можуть бути захищені бітом W: якщо W в 0, записування заборонено. В усіх згаданих випадках генерується ви­няткова ситуація 13 (загальна помилка захисту). У табл. 10.7 наведено дозволені комбінації бітів байта захисту.

Таблиця 10.7. Дозволені комбінації бітів байта захисту під час виконання операцій звернення до пам'яті

Операція

Р

DPL S

Е

C/ED

Я/ w

А

Примітка

Зчитування

1

X х 1

0

X

X

X

Сегмент даних або стека

з пам'яті

1

XX 1

1

X

1

X

Сегмент коду

Записування

1

XX 1

0

X

1

X

Сегмент даних або стека

в пам'ять

Щоб перевірити коректність доступу, перевіряється, чи не виходить адреса за межу сегмента. Перевірка здійснюється з урахуванням розміру даних і напрямку зростання сегмента. Якщо сегмент є сегментом стека (біт Е = 0 та біт ED S 1), то він зростає в бік молодших адрес, і тоді обчислена адреса має бути не меншою за межу сегмента. Якщо ж сегмент є сегментом коду (біт Е = 1) або даних (біт Е = 0 та біт ED $ 0), він зростає в бік старших адрес, тому до обчисленої адреси до­дається розмір даних (для команди mov — залежно від того, який із регістрів про­цесора бере участь у передаванні-прийманні даних) і отримана адреса має бути не більшою за межу сегмента. За наявності помилки генерується виняткова ситуа­ція 13 (загальна помилка захисту).

Розглянемо такий приклад [91].

Приклад 2. Звернення до пам'яті

Виконується команда

mov es:[ebx+4],еах

  1. Перевіряється біт Е дескриптора d, завантажений у дескрипторний регістр, який відповідає сегментному регістру es. Якщо Е3=51, фіксується спроба запи­су в сегмент коду (помилка 13).

  2. Перевіряється біт W дескриптора d. Якщо W = 1, фіксується спроба запису в сегмент, захищений від запису (помилка 13).

  3. Із сегмента d добувається межа сегмента segjimit. Якщо в d значення G=l, то segjimit 4096 (межа у 4-кілобайтових сторінках).

  4. Обчислюється зміщення: offset * ebx I 4

6. Перевіряється відсутність виходу за межу сегмента за таким алгоритмом: Якщо ED = 0 (сегмент даних зростає в бік старших адрес), то

порівнюється offset + data_size1 - offset + 3 (зміщення останнього байта даних, розмір даних — 4 байти) і segjimit; якщо offset + 3 > segjimit, фіксується некоректне звернення (помилка 13). Інакше, якщо ED ■* 1 (сегмент стека зростає в бік молодших адрес), то порівнюється offset і segjimit;

якщо offset < segjimit, фіксується некоректне звернення (помилка 13).

  1. З дескриптора d добувається seg base.

  1. Обчислюється адреса segjbase + offset, і в пам'ять за цією адресою заносяться дані з регістра еах.