"Игорь Коваль. Как написать вирус" - читать интересную книгу автора

нии прерывания Int 28h можно смело пользоваться
любыми функциями DOS .
Далее, для проверки наличия вирусного кода в памя-
ти наш вирус будет использовать так называемое
мультиплексное прерывание - Int 2fh, и поэтому мы
должны перехватить и его ( см п. 2.7 ) .
И, наконец, мы должны написать обработчик критиче-
ской ошибки .Она возникает,например,если мы попы-
таемся записать информацию на вынутую из дисковода
дискету . Наш вирус должен перехватить прерывание
по критической ошибке ( Int 24h ) и выполнить его
обработку .


2.17 Обработчик Int 13h

Как мы уже выяснили, этот обработчик должен запи-
сывать в ячейку " tg_13h " значение " 1 ", если в
данный момент выполняется прерывание Int 13h, или
значение " 0 " - в противном случае .
К сожалению,в MS DOS отсутствует какое - либо сре-
дство, позволяющее узнать, когда именно активно
прерывание Int 13h .И поэтому единственный способ
решения этой задачи - установка на Int 13h так на-
зываемого " фильтра ", который отслеживал бы все
вызовы вышеуказанного прерывания .
Самое простое решение - это перехватить Int 13h на
себя,а в самом обработчике вызвать системный обра-
ботчик как дальнюю процедуру .Конечно, перед этим
нужно записать в " tg_13h" единицу - это будет ин-
дикатором выполнения Int 13h в данный момент .Ко-
гда системный обработчик выполнится, управление
вновь получит " фильтр ".Поскольку Int 13h уже вы-
полнилось, можно сбросить в "0" переменную tg_13h.
Итак :

; _______________________________________________
;| |
;| Напишем новые обработчики INT 13h, INT 21h, |
;| INT 24h и INT 2fh ... |
;|_______________________________________________|

to_new_13h equ $-vir

new_13h: jmp cs:start_13h

tg_13h db 0
ax_13h dw 0
cs_13h dw 0
ip_13h dw 0