Поиск файлов на диске по шаблону по всем каталогам диска. Вывод размера, даты создания и полного пути к найденным файлам
Поиск вредоносных программ по средствам программ антивирусных. Выбор формата представления данных. Интерфейс программы, ее тестирование и отладка. Список процедур, их назначение. Поиск как средство для облегчения, удобства, надежности работы на ПК.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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
Подобные документы
Защита компьютера от вредоносных программ. Принцип работы антивирусных программ: проверка файлов, загрузочных секторов дисков и оперативной памяти и поиск в них известных и новых вредоносных программ. Сигнатуры и их использование при работе с компьютером.
презентация [976,8 K], добавлен 21.05.2019Особенности работы "поисковика" дублирующихся файлов на диске. Выбор среды программирования. Разработка программного продукта. Основные требования, предъявляемые к программе, производящей поиск дублирующихся файлов на диске. Отображение скрытых файлов.
курсовая работа [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Аннотация и инструменты базы BioCyc. Варианты поиска BioCyc. Поиск генов, белков, РНК и соединений. Поиск сайтов ДНК или мРНК, рост Медиа. Анализ поиска в полнотекстовых статьях. Ключевые аспекты данных BioCyc. Поиск кросс-организма и поиск BLAST.
презентация [5,3 M], добавлен 11.06.2019