Инструменты пользователя

Инструменты сайта


msx:floppy_disk_filesystem_structure:600

Первая страницаПредыдущая страницаНазад к обзоруСледующая страницаПоследняя страница

Приложение VI. Программа борьбы с вирусом

novirus.asm

; ┌─────────────────────────────────────────────────────────────┐
; │     NOVIRUS.MAC - Программа борьбы с вирусом                │
; │     Использование:                                          │
; │     NOVIRUS       Выдает информацию о заражении диска и ОЗУ │
; │     NOVIRUS -     Заодно уничтожает вирус                   │
; └─────────────────────────────────────────────────────────────┘
;
        .Z80
Hook    equ    0F26Dh
Bdos    equ    5
STROUT  equ    09h           ; Функции BDOS: - вывод строки
DNAME   equ    19h           ;               - выдача номера дисковода
SETDMA  equ    1Ah           ;               - установка адреса обмена
DREAD   equ    2fh           ;               - чтение сектора с диска
DWRITE  equ    30h           ;               - запись сектора на диск
StEntry equ    001Fh
Params  equ    82h           ; Здесь находится строка параметров при
                             ; запуске программы.
        ld     a,(Hook)
        cp     0C9h
        jr     z,test2
        ld     de,mess1
        ld     c,STROUT
        call   Bdos
        ld     a,(Params)
        cp     '-'
        jr     nz,test2
        ld     a,0C9h
        ld     (0F26Dh),a
        call   kill
test2:  ld     de,_DMA
        ld     c,SETDMA
        call   Bdos
        ld     c,DNAME
        call   Bdos
        ld     (StDrive),a
        ld     l,a           ; N дисковода
        ld     de,0          ; N Сектора
        ld     h,1           ; Число секторов
        ld     c,DREAD       ; Чтение сектора
        call   Bdos
        ld     a,(_DMA+StEntry)
        .8080
        cpi    (Push h)      ; Диск заражен, если Push h в байте
        .Z80                 ; StEntry - только для нашего вируса !
        ret    nz
        ld     de,mess2
        ld     c,STROUT
        call   Bdos
        ld     a,(Params)
        cp     '-'
        ret    nz
        ld     hl,_DMA + 103h ; Доступ  к  месту в вирусе, где записаны
        ld     a,(hl)         ; стандартные 6 байт. Производится так:
        .8080                 ; в байтах 3÷6 вируса расположена команда
        cpi    (lxi d)        ; LD  DE, Rettable-Vbeg, т.е. в  байте 4
        .z80                  ; размещен относительный адрес начала таб﹣
        ret    nz             ; лицы стандартных байтов.
        inc    hl             ;    ▇Только▁ для нашего вируса !
        ld     e,(hl)
        inc    hl
        ld     a,(hl)
        or     a
        ret    nz
        ld     d,a
        ld     hl,_DMA + 100h
        add    hl,de          ; Теперь hl = Адрес таблицы
        ld     de,_DMA+StEntry
        ld     bc,6
        ldir
        ld     de,0           ; N Сектора
        ld     hl,(StDrive)   ; N дисковода
        ld     h,1            ; Число секторов
        ld     c,DWRITE       ; Запись сектора
        call   Bdos
kill:   ld     de,mess3
        ld     c,STROUT
        jp     Bdos
mess1:  db     'Внимание, вирус в памяти',0Dh,0Ah,'$'
mess2:  db     'Внимание, вирус на диске',0Dh,0Ah,'$'
mess3:  db     'Нейтрализован', 0Dh,0Ah,'$'
StDrive:ds     1
_DMA    equ    $
        END

Первая страницаПредыдущая страницаНазад к обзоруСледующая страницаПоследняя страница

msx/floppy_disk_filesystem_structure/600.txt · Последние изменения: 2023-06-04 17:10 — GreyWolf