Контроль доступу до вибраних файлів з веденням протоколу

Описание:
Тип работы: курсовая работа
Ведення протоколу роботи комп"ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.
Доступные действия
Введите защитный код для скачивания файла и нажмите "Скачать файл"
Защитный код
Введите защитный код

Нажмите на изображение для генерации защитного кода

Текст:

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення

Курсовий проект

з дисципліни “Програмування на мові ASM-86”

на тему:

“Контроль доступу

до вибраних файлів з веденням протоколу"


Зміст

1. Вступ

2. Постановка задачі

3. Обґрунтування вибору методів розв^язку задачі

4. Алгоритм програми

5. Реалізація програми

6. Системні вимоги

7. Інструкція для користувача

Висновки

Використана література

Додаток

Лістинг програми


1. Вступ

У деяких випадках буває необхідно вести протокол роботи комп^ютера. Наприклад, записувати клавіші, які натискаються, записувати імена файлів, до яких звертається користувач. Описана програма дозволяє задати список розширень файлів і заносити у файл час і дату доступу до них.

 

2. Постановка задачі

Треба написати програму, яка б дозволяла вести протокол доступу до потрібних файлів на диску, використовуючи мову програмування асемблер.

 

3. Обґрунтування вибору методів розв^язку задачі

Для того, щоб вести контроль доступу до файлів, необхідно “впіймати" момент, в який відбувається доступ. Системний сервіс MS-DOS (переривання 21h) містить кілька функцій, які викликаються для звертання до файлів. Це функції створення, відкриття, закриття, запису та читання з файлів. Існують функції переміщення позиції та вилучання файлів.

При виклику переривання 21h код функції заноситься в регістр AH, і в інші регістри - інша інформація. Якщо перехопити переривання 21h, то перед обробкою можна перевірити, чи є код в регістрі АН кодом відкриття файла. В цьому випадку перед обробкою файла можна занести в інший файл дату, час та назву файла, до якого звертаються.

Для того, щоб не виникло за циклювання (для запису в протокол теж використовується функція відкриття!), перед викликом запису встановлюється прапорець, який вказує, що іде запис протоколу, і протоколювати цей виклик не треба. По завершенні він скидається.


4. Алгоритм програми

Алгоритм основної частини

1. Перевірити наявність програми у пам^яті.

2. Прочитати з файла filelist. dat список розширень файлів.

3. Перехопити вектор переривання 21h

4. Завершитись і залишитись резидентно.

Алгоритм обробника переривання 21h.

1. Перевірити код функції. Якщо це не код 3dh (відкриття файлу), то передати керування стандартному обробнику.

2. Перевірити розширення файла. Якщо воно не співпадає з жодним з заданих, то передати керування стандартному обробнику.

3. Визначити та сформувати в текстовому вигляді дату і час

4. Відкрити файл, перейти на його останню позицію та записати туди ім^я, час та дату.

5. Закрити файл

6. Передати керування стандартному обробнику.

 

5. Реалізація програми

Програма написана на мові програмування низького рівня Assembler. Її скомпільовано у вигляді COM-файла.

Після початку роботи, згідно алгоритму, відбувається перевірка наявності програми у пам^яті і перехоплення переривання 21h. Після цього програма починає обробку.

Програма містить декілька процедур:

read_extensions-читання розширень з filelist. dat

check_extension - перевірка співпадання розширень

process_file-запис у файл протоколу інформації

new_21h-новий обробник переривання 21h.

Для доступу до файлів використовуються функції переривання 21h. Для отримання часу використовується функція BIOS 1Ah.

 

6. Системні вимоги

Операційна система MS-DOS (НЕ Windows)

Процесор80286+

Пам^ять640K+

Жорсткий диск 5M+

7. Інструкція для користувача

Спочатку необхідно задати типи файлів, які треба контролювати. У файл filelist. dat необхідно записати розширення імен файлів, які треба контролювати, наприклад:

exe

com

bat

sys

txt

Після цього необхідно, знаходячись в ДОС, запустити програму filelist. doc. Якщо не виникне помилок, то програма завантажиться у пам^ять. Якщо програму вже завантажено, то вона видасть відповідне повідомлення.

Після цього буде створено (якщо немає) файл з протоколом (по змовчанню c: empfilelist. log). При спробі відкрити або запустити файл з одним із вказаних розширень у протокол буде занесено ім^я файлу, дату і час події.


Висновки

Отже, за допомогою написаної програми можна записувати у файл імена, дату і час виклику файлів заданого типу. Програма займає мало місця у пам^яті та невибаглива.

Також розглянуто методи побудови резидентних програм і роботу з перериванням 21h.


Використана література

1. П. Абель "Мова асемблера для IBM PC та програмування." М.: Вища школа, 1992.

2. Конспект лекцій з дисципліни “Програмування на мові ASM-86"


Додаток

Лістинг програми

.286

. model tiny

. code

org 100h

start:

jmp begin

old_21h dd 0

flag db 0

log_file db "c: empfilelist. log",0

filename db 200 dup (0)

data_str db "00-00-00 00: 00: 00 - "

eoln db 10,13

extensions db 100*3 dup (0)

fileerror db "FILELIST. DAT Error! ",10,13,"$"

datname db "filelist. dat",0

a_load db "Program is in memory already!!! ",10,13,"$"

check_extension proc

mov di,offset filename-1

di_i:

inc di

mov al,byte ptr [di]

cmp al,0

jne di_i

sub di,3

mov ah,byte ptr [di]

mov bh,byte ptr [di+1]

mov ch,byte ptr [di+2]

mov si,offset extensions

new_name:

mov al,byte ptr [si]

mov bl,byte ptr [si+1]

mov cl,byte ptr [si+2]

cmp al,0

je exit_1

cmp bl,0

je exit_1

cmp cl,0

je exit_1

sub al,ah

sub bl,bh

sub cl,ch

add al,bl

add al,cl

cmp al,0

je exit_2

add si,3

jmp new_name

exit_1:

mov al,0

jmp exit_0

exit_2:

mov al,1

exit_0:

ret

check_extension endp

process_file proc

push es

push ds

pusha

push cs

pop es

; copy filename

mov si,dx

mov di,offset filename

mov cx, 200

rep movsb

push cs

pop ds

; check extension

call check_extension

cmp al,0

jne start_wr

jmp error_p

start_wr:

; open file

mov ah,3dh

mov al,1

mov dx,offset log_file

int 21h

jnc no_er

jmp error_p

no_er:

mov si,ax

; seek eof

mov ah,42h

mov al,2

mov bx,si

xor cx,cx

xor dx,dx

int 21h

mov di,offset data_str

mov ah,4

int 1ah

mov al,cl; year

and al,0fh

add al,30h

mov ah,cl

shr ah,4

add ah,30h

mov byte ptr [di],ah

mov byte ptr [di+1],al

mov al,dh; month

and al,0fh

add al,30h

mov ah,dh

shr ah,4

add ah,30h

mov byte ptr [di+3],ah

mov byte ptr [di+4],al

mov al,dl; day

and al,0fh

add al,30h

mov ah,dl

shr ah,4

add ah,30h

mov byte ptr [di+6],ah

mov byte ptr [di+7],al

mov ah,2

int 1ah

mov al,ch; hour

and al,0fh

add al,30h

mov ah,ch

shr ah,4

add ah,30h

mov byte ptr [di+9],ah

mov byte ptr [di+10],al

mov al,cl; min

and al,0fh

add al,30h

mov ah,cl

shr ah,4

add ah,30h

mov byte ptr [di+12],ah

mov byte ptr [di+13],al

mov al,dh; sec

and al,0fh

add al,30h

mov ah,dh

shr ah,4

add ah,30h

mov byte ptr [di+15],ah

mov byte ptr [di+16],al

; date

mov ah,40h

mov bx,si

mov dx,offset data_str

mov cx,22

int 21h

; write file name

xor cx,cx

mov bx,offset filename

lll:

mov al,byte ptr [bx]

cmp al,0

je st_l

inc cx

inc bx

jmp lll

st_l:; get filename length

mov ah,40h

mov bx,si

mov dx,offset filename

int 21h

; write eoln

mov ah,40h

mov bx,si

mov cx,2

mov dx,offset eoln

int 21h

; close file

mov bx,si

mov ah,3eh

int 21h

error_p:

popa

pop ds

pop es

ret

process_file endp

new_21h:

pushf

cmp ah,3dh

jne no_3d

cmp byte ptr cs: [flag],1

je no_3d

mov ah,2

mov dl,7

int 21h

mov byte ptr cs: [flag],1

call process_file

mov byte ptr cs: [flag],0

no_3d:

popf

jmp dword ptr cs: [old_21h]

rez_end:

buf db 1000 dup (0)

read_extensions proc

mov ah,3dh

mov al,0

mov dx,offset datname

int 21h

jnc all_ok

mov ah,9

mov dx,offset fileerror

int 21h

mov ah,4ch

int 21h

all_ok:

mov si,ax

mov ah,3fh

mov bx,si

mov cx,1000

mov dx,offset buf

int 21h

mov bx,si

mov ah,3eh

int 21h

mov di,offset extensions

mov si,dx

xor cx,cx

mm:

mov al,byte ptr [si]

cmp al,0

je stop_mm

cmp al,61h

jb skip_c

cmp al,7ah

ja skip_c

mov byte ptr [di],al

inc di

inc cx

skip_c:

inc si

cmp cx,290

ja stop_mm

jmp mm

stop_mm:

ret

read_extensions endp

begin:

xor ax,ax

mov es,ax

mov al,byte ptr es: [505h]

cmp al,106

je loaded

mov byte ptr es: [505h],106

push cs

pop es

call read_extensions

mov ah,3dh

xor al,al

mov dx,offset log_file

int 21h

jnc ook

mov ah,3ch

xor cx,cx

mov dx,offset log_file

int 21h

ook:

mov bx,ax

mov ah,3eh

int 21h

xor ax,ax

mov ds,ax

mov ax,word ptr ds: [21h*4]

mov word ptr cs: [old_21h],ax

mov ax,word ptr ds: [21h*4+2]

mov word ptr cs: [old_21h+2],ax

mov ax,offset new_21h

mov word ptr ds: [21h*4],ax

push cs

pop ax

mov word ptr ds: [21h*4+2],ax

mov dx,offset rez_end+1

int 27h

loaded:

mov ah,9

mov dx,offset a_load

int 21h

mov ah,4ch

int 21h

end start

Информация о файле
Название файла Контроль доступу до вибраних файлів з веденням протоколу от пользователя z3rg
Дата добавления 11.1.2012, 19:24
Дата обновления 11.1.2012, 19:24
Тип файла Тип файла (zip - application/zip)
Скриншот Не доступно
Статистика
Размер файла 16.51 килобайт (Примерное время скачивания)
Просмотров 636
Скачиваний 106
Оценить файл