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

указывает на начало ее PSP .Кроме того, в самом
начале вируса мы записали директиву " org 110h ".
Но ведь к вышеуказанным ячейкам памяти вирус об-
ращается в резидентном режиме, да еще и относите-
льно CS .А CS указывает строго на начало обработ-
чика, а не на начало PSP, как это было при компи-
ляции ! Поэтому относительный адрес ячеек необхо-
димо уменьшить на 110h, что мы и сделали . Этот
прием будет использован еще несколько раз при по-
строении вирусных обработчиков прерываний,поэтому
полезно будет понять, на чем он основан .


2.6 Сохраняем регистры процессора

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

pushf ;Сохраним в сте-
push ax ;ке регистры ...
push bx
push cx
push dx
push si
push di
push bp
push ds
push es
jmp cs:infect ;Перейти к зара-
;жению файлов

Заметим, что значения регистров записываются уже в
область " newstack ", а не в стек прерванной прог-
раммы .Значения SS и SP сохраняются в переменных :
" ss_save " и " sp_save ", и поэтому в стек не за-
носятся .Команда " jmp cs:infect " также относится
к резидентной секции и передает управление "зараз-
ной" части вирусного кода .


2.7 Создаем секцию инициализации

А теперь пора заняться изготовлением секции иници-