Резидентные программы

Автор работы: Пользователь скрыл имя, 14 Мая 2012 в 16:48, курсовая работа

Описание

В данной работе рассмотрено явление, которое в операционной системе MSDOS играет роль многозадачности. С истинной многозадачностью можно столкнуться, рассматривая программирование в операционной системе Windows. Многозадачность же, рассматриваемая в этой курсовой работе, может быть названа нелегальной. Термин TSR происходит от английской фразы Terminate State Resident, т.е. "завершить и остаться резидентным". Резидентная программа, находясь в памяти, выполняет свои функции через перехваченные прерывания. Связь с резидентной программой также осуществляется посредством прерываний.

Содержание

1 РЕЗИДЕНТНЫЕ ПРОГРАММЫ 4
2 ЗАЩИТА РЕЗИДЕНТНЫХ ПРОГРАММ ОТ ПОВТОРНОЙ УСТАНОВКИ .....8
3 ВЫГРУЗКА РЕЗИДЕНТНЫХ ПРОГРАММ ИЗ ПАМЯТИ 12
4 ОПИСАНИЕ ПРОГРАММЫ 13
Заключение 21
Литература 22
Приложение-листинг 23
Приложение-рисунок 35

Работа состоит из  1 файл

Kura.doc

— 148.00 Кб (Скачать документ)

;после запуска программы, содержимое

;командной строки операционная система

размещает по смещению 8 Oh в PSP программы

;Точнее по самому смещению 80h находится байт,

;в котором размещается

;число, равное количеству символов в строке

;параметров. Получим его из PSP,

;для чего смещение интересующего нас байта

 

 

 

 

;потом загрузим этот байт в AL

 

 

;и проверим, длина строки параметров не меньше ;трех символов?

 

 

;если меньше, то выйти из программы.



27

 

;иначе перейдем на адрес следующего байта ;командной строки

inc si

;и возьмем из нее в АХ два байта

lodsw

;проверим, это наш ключ /и ?

cmp ах,'и/'

;если не равно, то это не наш ключ и программу завершаем

jne bue

;В противном случае начинаем модуль выгрузки программы из памяти

;Для начала загрузим регистры ES:BX адресом ; нашей программы в памяти ;для чего возьмем вектор любого из контролируемых ею прерываний например 28h

mov ax,3528h int 21h

;Теперь сохраним регистр ds.

push ds

; загрузим регистры DS:DX адресом старого ;вектора прерывания 1С взятого ;из памяти нашей программы, которая сейчас ;стоит резидентом.

 

 

Ids dx,dword ptr es:old_09

mov ax,2509h

int21h



 

 

Ids dx,dword ptr es:old_lC

;и возвратим его в таблицу векторов прерываний

mov ax,251Ch int21h

;То же сделаем с прерыванием 28h Ids dx,dword ptr es:old_28

mov ax,2528h

int21h

;И прерыванием 2F Ids dx,dword ptr es:old_2F

mov ax,252Fh

int 21 h

восстановим регистр DS

pop ds

;Используя стандартную функцию 49h прерывания 2lh, освободим память, занимаемую ;нашей резидентной программой. Функция освобождает память, сегмент ;которой стоит в ES. А там как раз адрес начала ;нашей резидентной программы.

mov ah,49h int 21h

;Теперь надо освободить память, занятую блоком ;окружения программы. Возьмем оттуда этот ;адрес и поместим его в ES

mov es,word ptr es:[002ch]

;После чего дадим команду освободить этот блок

mov ah,49h int 21h

завершить программу и возвратиться в операционную систему

bue:

mov ax,4c00h

int 21h

TSRprog   endp code_seg ends end begin

Приложение-рисунок

 

сл C:\WINDOWSUystem32tomd.exe - progl .com

i- nix

Microsoft Uindous XP (Версия 5.1.26111 CO Корпорация Майкрософт, 1985-2001.

 

C:\Docuraents and Settings\ftflMHHMCTpaTop>cd..

 

C:\Documents and Settings>cd..

 

C:\>cd prog

 

C:\prog>proMessage

 

C:\PR0G>_

4

•  I

 

 



Информация о работе Резидентные программы