Поиск файлов на диске по шаблону по всем каталогам диска. Вывод размера, даты создания и полного пути к найденным файлам

Поиск вредоносных программ по средствам программ антивирусных. Выбор формата представления данных. Интерфейс программы, ее тестирование и отладка. Список процедур, их назначение. Поиск как средство для облегчения, удобства, надежности работы на ПК.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 17.05.2013
Размер файла 22,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

4

Московский Энергетический Институт

Институт автоматики и вычислительной техники

Кафедра ВМСС

Курсовая работа по дисциплине

«Системное программное обеспечение»

Тема: Поиск файлов на диске по шаблону по всем каталогам диска. Вывод размера, даты создания и полного пути к найденным файлам

Студент: Резвая Галина

Москва 2010

Содержание

Введение

1. Анализ задания

2. Интерфейс программы

3. Выбор формата представления данных

4. Список процедур, их назначение

5. Список функций, используемых в программе

6. Тестирование и отладка

Заключение

Список литературы

Приложение А. Листинг программы

Введение

Поиск файла на диске по шаблону - задача, с которой нам приходится сталкиваться практически всякий раз при работе на компьютере. Это и непосредственный поиск, для которого мы используем поисковую систему проводника и неявный - поиск вредоносных программ по средствам программ антивирусных. Поиск необходим для облегчения, удобства, надежности работы на персональном компьютере. Для написания программы, решающей поставленную задачу, на ассемблере необходимо использовать множество функций работы с файлами и базовые знания языка.

1. Анализ задания

программа поиск интерфейс

Программа должна реализовать поиск файла по заданному пользователем шаблону во всех каталогах выбранного пользователем диска. По исполнению программы на экран будут выведены следующие сведения: полный путь к файлу; дата и время создания файла; размер файла в байтах и количество результатов в целом (количество файлов, удовлетворяющих шаблону).

2. Интерфейс программы

Интерфейс программы прост и удобен. После запуска на экран выводится сообщение о том, что необходимо ввести букву диска, на котором будет происходить поиск. После того, как пользователь введет символ, выводится сообщение о том, что необходимо ввести шаблон поиска. По нажатию клавиши Enter программа начинает поиск файла по указанному шаблону, на указанном диске. Если таковые файлы были найдены, то будут выведены последовательно по мере нахождения, друг за другом полный путь к файлу, дата и время создания, и размер файла в байтах. Эта информация, привязанная к каждому файлу, выводится через пустую строку. По окончанию поискового процесса выведется количество найденных файлов.

3. Выбор формата представления данных

Из директив, определяющих элементы данных в программе используются директивы DB и DW(директивы, определяющие байт и два байта соответственно). В табл.1 перечислены переменные, используемые в программе.

Таблица 1

disk_enter_text

db

строка - введите диск для поиска

enter_text

db

строка - введите шаблон для поиска

create_text

db

строка - вывод - дата и время

size_text

db

строка - размер файла

summ_text

db

строка - всего результатов

disk_text

db

строка для последующего ввода в нее буквы диска

cur_text

db

текущий каталог

root_text

db

корневой каталог

any

db

шаблон любого файла или каталога

parent

db

родительский каталог

count

db

счетчик найденных файлов

search_template

db

шаблон поиска

struct_locate

dw

начальный путь для записи промежуточных результатов

path_locate

dw

полный путь к файлу

end_text

db

переход на след строку

size_buf

dw

буфер для хранения размера

4. Список процедур, их назначение

В табл.2 представлены процедуры и их назначение

Таблица 2

outputl

процедура вывода строки. Перед вызовом процедуры в регистре dx должен храниться адрес на строку, предназначенную для вывода.

outputs

процедура вывода символа. Перед вызовом процедуры в регистре bl должен храниться адрес на символ, предназначенный для вывода.

creation_dtime

процедура вывода времени, даты. Перед вызовом процедуры в регистрах dx, cx должны храниться дата и время соответственно в DOS-формате.

dec_output

процедура вывода числа на экран в десятичной форме. Перед вызовом процедуры в регистре ax должно находится число, которое необходимо перевести в десятичный формат и вывести на экран.

size_output

процедура вывода размера файла. Перед вызовом процедуры по смещению si должна храниться старшая часть, по смещению si+2 младшая часть выводимого размера. Так как она имеет длину два слова.

path_output

получение и вывод на экран полного пути к файлу

search

процедура поиска в каталоге файла по ранее заданному шаблону

5. Список функций, используемых в программе

Функция 09h прерывания 21h. Вывод строки на экран.

Вход: DS:DX -- адрес ASCII-строки символов,

заканчивающийся '$'

Выход: ничего

Функция 02h прерывания 21h. Вывод одиночного символа на экран.

Вход: DL -- символ, который необходимо вывести.

Выход: ничего

Функция 7160h прерывания 21h. Получение полного пути к файлу.

Вход: CL = 2. Получить полный путь с длинными именами.

СН = 0. Получить полный путь

DS:SI -- адрес ASCIIZ-строки с именем файла или каталога, для которых необходимо получить путь в длинной форме

ES:DI -- адрес строки, в которую необходимо записать полный путь

Выход: CF = 0 -- успешное выполнение функции, в результате чего полный путь от корневого каталога в виде ASCIZ-строки записывается в буфер, адрес которого указан в ES:DI.

CF = 1 -- АХ = код ошибки

Функция 714Eh прерывания 21h. Поиск первого файла.

Вход: CL -- атрибуты искомых файлов

DS:DX -- адрес ASCIIZ-строки с именем искомого файла или каталога

ES:DI -- адрес, куда будет возвращена информация о файле

SI -- формат, в котором возвращается дата и время (0-64р)

Выход: CF = 0 -- успешное выполнение функции, АХ = дескриптор, использующийся далее для процесса поиска.

CF = 1 -- АХ = код ошибки при неудачном выполнении функции.

Функция 71A7h прерывания 21h. Преобразование времени в DOS-формат. Вход: BL = 0 -- преобразовать 64-разрядное время в DOS-время .

DS:SI -- указатель на структуру, содержащую время.

Выход: CF = 0 -- успешное выполнение функции.

CX - время в упакованном формате.

DX - дата в упакованном формате.

CF = 1: АХ - код ошибки.

Функция 714Fh прерывания 21h. Поиск следующего файла.

Вход: ВХ = дескриптор, полученный функцией 714Eh

ES:DI -- адрес куда будет возвращена информация о файле

SI -- формат, в котором возвращается дата и время (0-64р)

Выход: CF = 0 -- успешное выполнение функции, АХ = дескриптор, использующийся далее для процесса поиска.

CF = 1 -- АХ = код ошибки при неудачном выполнении функции.

Функция 713Bh прерывания 21h. Смена текущего каталога.

Вход: DS:DX -- указатель на буфер, содержащий полный путь от корневого каталога в виде ASCIZ-строки и в качестве последнего элемента включающий имя нового текущего каталога

Выход: CF = 0 -- АХ - не определен;

CF=0 -- АХ = код ошибки: 03h -- путь не найден

Функция 71A1h прерывания 21h. Завершение поискового процесса.

Вход: BX = идентификатор процесса, который необходимо завершить

Выход: CF = 0, если операция выполнена
CF = 1 и АХ = код ошибки

Функция 01h прерывания 21h. Чтение одиночного символа с клавиатуры.

Вход: ничего

Выход: AL = ASCII-код символа или 0

Функция 0Ah прерывания 21h. Чтение строки с клавиатуры.

Вход: DS:DX -- адрес буфера, первый байт которого должен содержать максимальное количество символов для ввода

Выход: введенная строка начиная с третьего байта буфера по адресу в DS:DX, длина строки во втором байте буфера.

Функция 4ch прерывания 21h. Завершение программы.

Вход: AL = код завершения.

Выход: ничего

6. Тестирование и отладка

После проведения многочисленных тестов необходимо заметить, что для правильной работы программы необходимо: ввести существующий диск для поиска; иметь права доступа на чтение в найденном каталоге; в качестве шаблона поиска использовать точное имя файла или папки.

Заключение

Поставленная задача была реализована. Особые трудности вызвала отладка программы.

Список литературы

1. П. Абель Язык ассемблера для IBM PC и программирования - М.: Высшая школа, 1992. -447с.

2. Файл руководства по системным функциям - interrup.lst.

3. Интернет ресурсы: http://subscribe.ru/archive/comp.prog.assembler - общая информация.

4. Интернет ресурсы: http://assembler-rus.ru - общая информация.

5. Интернет ресурсы: http://demon-riabev.by.ru - информация по функциям работы с файлами.

Приложение А. Листинг программы

; Поиск файлов на диске по шаблону по всем каталогам диска.

; Вывод размера, даты создания и полного пути к найденным файлам.

;_______________________________________________________________

.model small

.stack 200h

;_______________________________________________________________

.data

search_template db 14,0,13 dup (?),0 ; шаблон поиска, мб сделать label

any db '*',0 ; шаблон любого файла или

;каталога

parent db '..',0 ; родительский каталог

count db 0 ; счетчик найденных файлов

struct_locate dw 00A0h ; начальный путь для записи пром.

;результатов

path_locate dw 0100h ; полный путь к файлу

create_text db 'Creation date and time: $' ; строка - вывод - дата и время

size_text db 'Size: $' ; строка - размер файла

end_text db 0dh,0ah,'$' ; переход на след строку

summ_text db 'Summary: $' ; всего результатов

enter_text db 'enter pattern for search: $' ; строка - введите шаблон для

;поиска

disk_enter_text db 'enter disk for search: $' ; строка - введите диск для поиска

disk_text db 'C:',0 ; строка для послед ввода в нее

;буквы диска

cur_text db '.',0 ; текущий каталог

root_text db '\',0 ; корневой каталог

size_buf dw 2 dup (?) ; буфер для хранения размера файла

;_________________________________________________________________

.code

outputl proc ; процедура вывода строки

mov ah,09h

int 21h

ret

endp outputl

outputs proc ; процедура вывода на экран одиночного символа

push dx

mov ah,02h

mov dl,bl

int 21h

pop dx

ret

endp outputs

creation_dtime proc ; процедура вывода времени, даты

; dx - |Y|Y|Y|Y|Y|Y|Y|M|M|M|M|D|D|D|D|D|

mov al,dl ; день

and al,00011111b ; накладываем маску на соответствующие

;разряды

mov ah,0

call dec_output ; выводим на экран в десятичной форме

mov bl,'/' ; разделяющий символ, для удобства

call outputs

mov ax,dx ; месяц

shr ax,5

and al,00001111b

mov ah,0

call dec_output

call outputs ; разделяющий символ, для удобства

mov al,dh ; год

and al,11111110b

shr al,1

mov ah,0

add ax,07BCh

call dec_output

mov bl,' ' ; разделяющий символ, для удобства

call outputs

; сx - |H|H|H|H|H|M|M|M|M|M|M|S|S|S|S|S|

mov al,ch ; час

and al,11111000b

shr al,3

mov ah,0

call dec_output

mov bl,':' ; разделяющий символ, для удобства

call outputs

mov ax,cx ; минуты

shr ax,5

and al,00111111b

mov ah,0

call dec_output

call outputs ; разделяющий символ, для удобства

mov al,cl ; секунды

and al,00011111b

mov ch,2

mul ch

call dec_output

ret

endp creation_dtime

dec_output proc ; процедура вывода числа на экран в десятичной форме

push cx

push bx

push dx

mov cx,0

conversion:

mov bl,1010b ; для перевода из двоичной системы в десятичную

div bl ; делим число на основание новой системы счисления

push ax ; остаток сохраняем в стеке

inc cx

mov ah,0

cmp al,0

jne conversion ; делим до тех пор, пока делимое не станет =0

output:

pop ax ; выводим остатки от деления в обратном порядке

mov dl,ah

mov ah,02h

cmp dl,9

jg hex_alpha

add dl,48

jmp out_end

hex_alpha:

add dl,55

out_end:

int 21h

loop output

pop dx

pop bx

pop cx

ret

endp dec_output

size_output proc ; процедура вывода размера файла

push ax ; размер файла имеет длину два слова, старшая

;хранится по смещению si, младшая - si+2

push bx

push cx

push dx

mov cx,0

mov bx,10 ; переводим размер из двоичной в десятичную

;систему счисления

hex2dec:

mov dx,0 ; т.к. результат деления может превышать размер

;слова, используем алгоритм деления по словам

mov ax,[si] ; делим старшее слово

div bx

mov [si],ax

mov ax,[si+2] ; производим деление младшего слова с учетом

;остатка от деления старшего слова (rest)

div bx ; rest*2^16 + младшее_слово / bx

mov [si+2],ax

push dx

add ax,[si]

inc cx

cmp word ptr [si],0

jne hex2dec

cmp word ptr [si+2],0

jne hex2dec

out_put:

pop ax

mov dl,al

mov ah,02h

cmp dl,9

jg hexalpha

add dl,48

jmp outend

hexalpha:

add dl,55

outend:

int 21h

loop out_put

pop dx

pop cx

pop bx

pop ax

ret

endp size_output

path_output proc ; получение и вывод на экран полного пути к файлу

push ax

push cx

push si

push di

push bx

push dx

pushf ; размещение регистра флагов в стеке

mov ax,7160h ; получение полного пути к файлу

mov cx,2 ; получение полного пути с длинными именами

lea si,cur_text ; DS:SI -- адрес ASCIIZ-строки с именем файла

;или каталога, для которых необходимо ;получить путь в длинной форме

int 21h ; ES:DI -- адрес строки, в которую необходимо ;записать полный путь

p_output:

mov bl,ds:[di] ; вывод полного пути к файлу на экран

call outputs

inc di

cmp bl,0

jne p_output

lea dx,end_text

call outputl

popf

pop dx

pop bx

pop di

pop si

pop cx

pop ax

ret

endp path_output

;========================================================= search proc ; процедура поиска в каталоге

mov ax, 714Eh ; функция поиска первого файла

mov cx, 0FFh ; с атрибутами: архивный, подкаталог,

;системный, спрятанный, только чтение

mov di, bp ; на начальный путь записи пром. результатов

mov si,0 ; время в 64разрядном формате

mov dx,offset search_template+2

; шаблон поиска, минус 2байта |Max|Real|

int 21h

jnc cf_search ; если ничего не найдено, ищем подкаталоги для

;дальнейшего поиска

jmp far ptr directory_search

cf_search:

mov bx,ax ; в в ax записывается порядк номер процесса поиска

file_search:

push bx ; сохраним значение регистров в стеке

push di

push dx

push si

lea di,count ; подсчет количества результатов

mov dl,[di]

inc dl

mov [di],dl

mov ax, 7160h ; получим полный путь к файлу

mov cl, 2 ; получить путь с длинными именами

mov cx, 0 ; получить полный путь(а не имя диска, если 80)

lea si, [bp+2Ch] ; формируем указатель на имя файла DS:SI

lea di,path_locate ; номинируем указатель на буфер, для получения

int 21h ;полного пути

pout: ; вывод полного пути к файлу на экран

mov bl,[di]

call outputs

inc di ; выводим пока не дойдем до признака конца строки

cmp bl,0

jne pout

lea dx,end_text ; переход на след строку

call outputl

lea dx,create_text ; вывод на экран "data, time: "

call outputl

mov ax,71A7h ; преобразование времени в DOS-формат

mov bl,0 ; dх получит дату, сх - время

lea si,[bp+4] ; указатель на структуру, содержащую время

int 21h

call creation_dtime ; вызов процедуры вывода даты и времени

lea dx,end_text ; переход на след строку

call outputl

lea dx,size_text ; вывод на экран "size: "

call outputl

mov ax,7143h ; получим атрибуты файла

mov bx,2 ; 2 - получим размер "сжатого файла"

lea dx,[bp+2Ch] ; DS:DX - ASCIIZ-строка с именем файла

int 21h

lea si,size_buf

mov [si],dx ; заносим размер файла в буфер

mov [si+2],ax

call size_output ; выводим на экран

lea dx,end_text ; переход на след строку

call outputl

lea dx,end_text

call outputl

pop si ; восстановим значение регистров

pop dx

pop di

pop bx

mov ax, 714Fh ; функция поиска следующего файла по шабл.

int 21h ; BX - номер процесса поиска, возвр-ся фун-ей

jnc file_search

directory_search:

mov ax,714Eh ; функция поиска первого подкаталога

mov di,bp ; ES:DI -- адрес, куда будет возвращена

;информация о файле

mov cx,1010h ; выводить только каталоги

mov si,0 ; формат, в котором возвращается дата и время

lea dx,any ; DS:DX -- адрес ASCIIZ-строки с именем искомого

;файла или каталога

int 21h

mov bx,ax

push cx ; для того, чтобы не обрабатывать ссылки на текущий

;и родительский

mov cl,ds:[bp+2Ch] ; каталог ('.' и '..'), прогоняем поиск два раза

cmp cl,2Eh ; если имя каталога начинается не с '.'

;(находимся в корне диска), сразу переходим в этот каталог

pop cx

jne directory_jump

mov ax,714Fh ; найти следующий подкаталог

int 21h

next_directory:

mov ax,714Fh ; поиск подкаталога

int 21h

jc search_fin ; если больше подкаталогов нет, завершаем поиск

directory_jump:

push bx

push si

push di

push dx

mov ax,713Bh ; смена текущего каталога, в DS:DX - адрес на

;ASCIIZ-строку с полным путем к новому каталогу

lea dx,[bp+2Ch] ; новый каталог является подкаталогом текущего =>

;полный путь можно опустить

int 21h

call search ; запускаем новый поиск в найденном подкаталоге

mov ax,713Bh ; переход в родительский каталог после поиска

mov dx,offset parent

int 21h

pop dx

pop di

pop si

pop bx

jmp next_directory

search_fin:

mov ax,71A1h ; завершение поискового процесса, указанного в BX

int 21h

ret

endp search

;_____________________________________________________

main:

mov ax,@data ; инициализация сегментов

mov ds,ax

mov es,ax

lea dx,disk_enter_text ; вывод на экран "enter disk for search:"

call outputl

mov ah,01h ; запись в al, считанного символа

int 21h

lea bx,disk_text

mov [bx],al ; запись букву диска в disk_text

lea dx,end_text ; переход на след строку

call outputl

mov ax,713Bh ; переход в корневой каталог указанного диска

lea dx,disk_text ; смена текущего каталога, DS:DX - путь к новому

;каталогу (ASCIIZ - строка)

int 21h

mov ax,713Bh

lea dx,root_text

int 21h

lea dx,enter_text ; на начальный путь записи пром. результатов

call outputl

mov ah,0Ah ; ввод поискового шаблона с клавиатуры

lea dx,search_template ; 0Ah - ввод строки с клавиатуры, результат

;записывается в DS:DX, начиная со смещения DX+2

int 21h ; по смещению DX предварительно помещается

;максимальная

; длина вводимой строки, DX+1 - количество ;считанных символов

mov bx,dx ; ставим в конец строки с введенным поисковым

;шаблоном нулевой символ

; (преобразование к ASCIIZ-строке, для

;совместимости с функциями 71xx)

mov dl,[bx+1] ; записываем в dl количество символов,

;считанных с клавиатуры

mov dh,0

mov di,dx

lea bx,[di+2] ; смещаемся в конец считанной строки с шаблоном

mov byte ptr[bx],0 ; и записываем нулевой символ

lea dx,end_text

call outputl

lea bp,struct_locate ; помещаем в bp указатель на начало

;"поисковой структуры"

mov bp,[bp]

call search

mov ah,09h

lea dx,summ_text ; вывод на экран "Summary: "

int 21h

lea si,count ; вывод на экран количества найденных файлов

mov al,[si]

mov ah,0

call dec_output

mov ah,4Ch ; стандартное завершение программы

int 21h

end main

Размещено на Allbest.ru


Подобные документы

  • Особенности работы "поисковика" дублирующихся файлов на диске. Выбор среды программирования. Разработка программного продукта. Основные требования, предъявляемые к программе, производящей поиск дублирующихся файлов на диске. Отображение скрытых файлов.

    курсовая работа [1,8 M], добавлен 28.03.2015

  • Проектирование пользовательского интерфейса программы, осуществляющей шифрование и дешифрование файлов. Выбор формата представления данных. Список процедур, макросов и их назначение. Описание используемых в программе функций, ее тестирование и отладка.

    курсовая работа [29,3 K], добавлен 17.05.2013

  • Проектирование пользовательского интерфейса. Выбор формата представления данных, используемые переменные. Список процедур и макросов, их назначение. Используемые в программе функции. Тестирование и отладка правильной работы программы, схема листинга.

    курсовая работа [28,6 K], добавлен 17.05.2013

  • Самые популярные и эффективные типы антивирусных программ. Список самых распространённых антивирусных программ в России. Порядок действий в случае проникновения вируса на компьютер. Роль антивирусной защиты и ее выбор для безопасной работы компьютера.

    презентация [1,2 M], добавлен 08.06.2010

  • Установка и использование антивирусных программ. Определение скорости проверки файлов на наличие вирусов. Проверка антивирусных программ на эффективность поиска зараженных файлов. Антивирусные программы NOD32, Dr. WEB, Kaspersky Internet Security.

    курсовая работа [69,1 K], добавлен 15.01.2010

  • Особенности антивирусных программ (антивирусов) - компьютерных программ, предназначенных для обезвреживания вирусов и различного рода вредоносного ПО, с целью сохранности данных и оптимальной работы ПК. Классификация и примеры антивирусных программ.

    реферат [22,4 K], добавлен 26.03.2010

  • Проектирование программ в среде Рascal с интерфейсом типа "Меню". Разработка и отладка программы сортировки массива данных. Освоение методов проектирования Pascal-программ с использованием графических процедур и функций из стандартного модуля Graph.

    контрольная работа [581,1 K], добавлен 16.01.2015

  • Проблема вредоносных программ. Принцип надежности компьютера. Влияние вирусных систем на повседневную работу пользователей персональных компьютеров. Разновидности вредоносных программ, их эволюция и методы зашиты от них. Антивирусы на рабочих станциях.

    контрольная работа [19,6 K], добавлен 04.10.2011

  • Описание документов, на основании которых ведется разработка. Назначение разработки и анализ функций проектируемого программного средства. Этапы разработки программы для поиска и открытия файлов. Руководство для пользователя на разработанную программу.

    курсовая работа [3,3 M], добавлен 10.11.2010

  • Первый прототип вируса. Идея создания самовоспроизводящихся программ. Разработка вирусоподобных программ. Основные признаки проявления вирусов. Классификация компьютерных вирусов. Рынок антивирусных программ. Основные виды антивирусных программ.

    презентация [1,8 M], добавлен 25.10.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.