
- •Лабораторна робота n7
- •Зміст роботи.
- •Довідкові дані.
- •Суть захищеного режиму
- •Захист від взаємного впливу програм.
- •Елементи організації захищеного режиму
- •Елементи системи привілеїв
- •Переривання в захищеному режимі.
- •Етап 1. Переключення в захищений режим та повернення в режим реальних адрес.
- •Перевірка поточного режиму процесора
- •Підготовка системних структур даних для роботи в захищеному режимі
- •Переключення процесора в захищений режим
- •Виведення повідомлення на екран
- •Послідовність дій для переводу процесора в режим реальних адрес.
- •Переформувати дескриптори сегментів даних і стека згідно вимог:
- •Завантажити селектори обновлених дескрипторів
- •Переключення в режим реальних адрес, вихід в dos, (припускаємо, що логічний сегмент нашої програми - code)
- •Int 21h ; чекать введення з клавіатури
- •Int 10h ; переключить відеоконтролер
- •Етап 2. Підготовка системних структур даних для забезпечення функціонування механізму переривань
- •Формування процедур обробки переривань
- •Розміщення та формування дескриптора сегмента Int_code в gdt.
- •Формування таблиці векторів переривань (idt)
- •Формування та запис вказівника таблиці векторів переривань.
- •Відновлення стандартної таблиці переривань при переключенні в реальний режим
- •Завдання на лабораторну роботу
- •Ускладнені завдання.
- •Питання для перевірки.
Int 21h ; чекать введення з клавіатури
mov ax,3
Int 10h ; переключить відеоконтролер
;закінчення роботи програми (стандартно)
mov ax,4c00h
int 21h
Етап 2. Підготовка системних структур даних для забезпечення функціонування механізму переривань
Формування процедур обробки переривань
Процедури обробки переривань доцільно розмістить в окремому сегменті кодів. Для цілей проведення експериментів по ініціалізації захисту рекомендується, щоб кожна процедура обробки переривань виводила на екран номер вектора переривань, наприклад
Int_code segment para public 'code' use16
Assume cs:Int_code
Vector=0
I_beg:
Pusha
Mov ax,vector
Jmp common_int
I_end:
Proc_int_size = I_end - I_beg
; Процедура обробки 0-го переривання виділена виключно
; для автоматичного визначення її розміру (Proc_int_size)
;
;
Vector=1
Rept 255
pusha
Mov ax,vector
Jmp common_int
Vector = Vector + 1
Endm
;
Mes_int Db 'INTERUPT N'
;
common_int:
; формування номера переривання в Mes_int
mov cl,10
div cl; молодша цифра в ah
or ah,30h ;формування текстового коду цифри
mov bh,ah
xor ah,ah
div cl; середня цифра в ah, старша - в al
or ax,3030h ;формування текстового коду цифр
mov dx,ax
; виведення повідомлення на екран
push offset deskr_es; селектор дескриптора із 1-го етапу
pop es
mov si,offset Mes_int
mov cx,10
mov di,2620 ;початкова адреса для виведення
mov ah,07h ;атрибут символів
outstr:
mov al,CS:[si]
stosw
inc si
loop outstr
mov al,' '
stosw
mov al,dl ;старша десяткова цифра номера вектора
stosw
mov al,dh ;середня десяткова цифра номера вектора
stosw
mov al,bh ;молодша десяткова цифра номера вектора
stosw
; після виведення повідомлення організуємо передачу управління
; в основний сегмент для переключення в режим реальних адрес
; Для цього використаємо команду IRET
; В даній точці програми в стек записано вміст всіх регістрів, адреса
;команди, яка визвала виключення, та вміст регістра ознак.
; Ми все це проігноруємо і запишемо в стек нові дані
pushf
push offset descr_cs; селектор дескриптора сегмента
; кодів із 1-го етапу
push offset return_dos
iret; передача управління по адресі return_dos основного сегмента кодів
common_end:
Int_code_size =common_end - l_beg
Int_code ends
Розміщення та формування дескриптора сегмента Int_code в gdt.
В відповідності з п.1.2.1. доповнимо сегмент GDT дескриптором сегменту Int_code .
deskr_Int_code descr <>
Основну програму доповнимо командами формування дескриптора сегмента Int_code
;Формування дескриптора сегмента Int_code
mov deskr_Int_code.limit_1,int_code_size ; розмір сегмента кодів
; формування фізичної адреси сегмента Int_code
xor eax,eax
mov ax, Int_code
shl eax,4 ;
mov dword ptr deskr_Int_code.base_1, eax
; атрибути сегмента Int_code
mov deskr_Int_code.attrib,code_seg
;--------------------------------------------------------