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

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

exit_zarasa: ;Восстановим
;регистры
;процессора ...
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
popf
mov ss,cs:ss_save-110h ;Восстановим
mov sp,cs:sp_save-110h ;стек ...
iret

Кроме того, вирус восстанавливает стек прерванной
программы, без чего дальнейшая работа невозможна .


2.16 Пишем обработчики прерываний

Для начала выясним, какие прерывания и с какой це-
лью наш вирус будет перехватывать .
Во - первых, необходимо перехватить прерывание Int
21h .Дело в том, что наш вирус является резидент-
ным, и должен заражать файлы при тех или иных со-
бытиях в вычислительной системе.Очень многие виру-
сы активизируются, например,при смене текущего ди-
ска или каталога .Этот метод является весьма удач-
ным, и мы реализуем именно его .Но для этого нужно
знать, когда именно выполняются смена каталога или
диска.Единственный способ узнать о таком событии -
это перехватить прерывание Int 21h на себя, и при
каждом его вызове проверять, какая именно функция
вызывается . Так мы и сделаем .
Во - вторых, нам не обойтись без перехвата Int 13h
( см п. 2.13 ) .
В - третьих,поскольку наш вирус будет пользоваться
функциями DOS,которые работают с диском в резиден-
тном режиме,необходимо знать,когда можно безопасно
обращаться к этим функциям . Для этого следует
перехватить прерывание Int 28h,которое всегда вы-
зывается только при выполнении DOS реентерабельной
секции своего кода .Иными словами, при возникнове-