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

ние зараженной программе . Естественно, она когда-
нибудь завершится и передаст управление DOS . Но
ведь в этом случае блок, который занимает вирусный
код, будет освобожден, и при первой необходимости
этот код будет уничтожен,чтобы записать на его ме-
сто другую информацию !В результате произойдет мо-
ментальное " повисание " компьютера .
Очевидно, этого можно избежать, если память, зани-
маемая вирусом, будет оставаться занятой в течение
всего сеанса работы,и не будет освобождаться после
завершения зараженной программы .
Как показал эксперимент, для этой цели достаточно
в MCB,предшествующем выделенному для вирусного ко-
да блоку, сделать определенные изменения.Но снача-
ла мы немного расскажем о структуре Memory Control
Blocks ( MCB ) и их использовании .
Для того, чтобы следить за использованием памяти,
в MS DOS предусмотрена специальная структура - так
называемый блок управления памятью,или MCB - блок.
Такой блок помещается DOS непосредственно перед
каждым вновь выделяемым блоком памяти, и система
ведет специальный список MCB - блоков,просматривая
его при выполнении тех или иных действий, связан-
ных с распределением памяти.
MCB обязательно начинается на границе параграфа и
всегда занимает целый параграф.Конечно,MS DOS дол-
жна знать о том, где именно расположен первый блок
управления памятью.На этот блок указывает внутрен-
няя переменная DOS, значение и местоположение ко-
торой известно только операционной системе .
Рассмотрим теперь структуру MCB - блока .Итак :

Байт 0 - содержит код 5Ah,если данный блок яв-
ляется последним в цепочке MCB, и код
4Dh - в противном случае .

Байты 1, 2 - Содержат PID (Program IDentificator)
программы, для которой DOS выделяла
блок, или ноль, если блок свободен .

Байты 3, 4 - Содержат размер блока в параграфах .
Следующий блок расположен в памяти по
адресу : MCB_NEW = MCB_OLD + lenght +
+ 1.Здесь MCB_NEW - сегментный адрес,
по которому располагается следующий
MCB, MCB_OLD - сегментный адрес рас-
сматриваемого MCB,а lenght - содержи-
мое байтов 3, 4 этого блока .

Остальные одиннадцать байт блока не используются и