Купить
 
 
Жанр: Учеба

Как написать компьютерный вирус

страница №11

переданных байт
При ошибке :
CF = 1
AX = код ошибки .

Функция 40h - Запись в файл или в устройство .Счи-
тывает данные из буфера и записывает их в файл,при
этом модифицируется указатель .При записи записы-
вается строка указанной длины .
Вызов : AH = 40h
BX = дескриптор
CX = количество передаваемых символов
DS : DX = адрес буфера, в который поме-
щаются данные
Возврат : AX = число переданных байт
При ошибке :
CF = 1
AX = код ошибки .

Функция 42h - Установка указателя в файле .Предна-
значена для установки указателя на требуемый байт
в файле .
Вызов : AH = 42h
BX = дескриптор
AL = режим установки указателя:
0 - смещение от начала файла
1 - смещение от текущего положения
указателя
1 - смещение от конца файла
CX = старшая часть смещения
DX = младшая часть смещения
Возврат : CX = старшая часть возвращенного указа-
теля
DX = младшая часть возвращенного указа-
теля .

Функция 48h - Выделение блока памяти указанного
размера .Выделяет блок памяти, после чего возвра-
щает его сегментный адрес .
Вызов : AH = 48h
BX = Размер блока памяти в параграфах
Возврат : AX = сегментный адрес выделенного систе-
мой блока
При ошибке :
CF = 1
AX = код ошибки .
BX = размер наибольшего доступного в
данный момент блока .

Функция 49h - Освобождение блока памяти .
Вызов : AH = 49h
ES = сегментный адрес блока,который сле-
дует освободить
При ошибке :
CF = 1
AX = код ошибки .

Функция 4Ah - Изменение размера блока памяти, ко-
торый был выделен программе .
Вызов : AH = 4Ah
BX = новый размер блока в параграфах .
ES = сегментный адрес блока,размер кото-
рого следует изменить
При ошибке :
CF = 1
AX = код ошибки .
BX = размер наибольшего доступного в
данный момент блока .

Функция 4Ch - Завершение процесса с кодом возвра-
та .Завершает текущую задачу и передает код завер-
шения родительскому процессу .Освобождает выделен-
ную программе память, сбрасывает на диск буферы,
закрывает дескрипторы, восстанавливает из PSP век-
тора прерываний INT 22h, INT 23h и INT 24h . Далее
управление передается родительскому процессу .

Вызов : AH = 4Ch
AL = код возврата .

AL = 00h обычно соответствует нормальному заверше-
нию программы .

Функция 4Eh - Поиск первого файла .Производит по-
иск в заданном каталоге первого файла, соответст-
вующего заданной маске и имеющего указанные атри-
буты .
Вызов : AH = 4Eh
CX = атрибуты файла ( могут комбиниро-
ваться ) :
1 - только читаемый ( read only )
2 - скрытый ( hidden )
4 - системный ( system )
8 - метка тома
20h - архивный ( archive )
DS : DX = адрес маски для поиска
Возврат : имя найденного файла и его расширение
записывается в DTA в байты 1Eh - 2Ah .За последним
символом расширения всегда следует точка : " . "
При ошибке :
CF = 1
AX = код ошибки .

Функция 4Fh - Поиск следующего файла .Почти всегда
используется в паре с предыдущей функцией и вызы-
вается после того, как был найден первый файл .
Вызов : AH = 4Fh
Возврат : имя найденного файла и его расширение
записывается в DTA в байты 1Eh - 2Ah .За последним
символом расширения всегда следует точка : " . "
При ошибке :
CF = 1
AX = код ошибки .

Мультиплексное прерывание INT 2Fh.Используется для
организации взаимодействия резидентных программ с
системой и друг с другом.Для программиста зарезер-
вированы функции : C0h - FFh .
Вызов : AH = 2Fh
AL = подфункция
Возврат : AL = 0 - программа не установлена и ее
можно установить
AL = 1 - программа не установлена и ее
нельзя установить
AL = 0FFh - программа уже установлена .
При ошибке :
CF = 1
AX = код ошибки .

--------------------------------------------------

Прерывание INT 13h, функция 02h - чтение сектора.
Считывает один или несколько определенных пользо-
вателем секторов физического диска в выделенный
буфер.Для начального сектора указываются такие ко-
ординаты : дорожка,сектор, головка .Секторы на до-
рожке нумеруются от единицы, дорожки и головки
нумеруются от нуля .
Вызов : AH = 02h
AL = количество читаемых секторов
CH = дорожка
CL = начальный сектор
DH = головка
DL = дисковод ( 00h - 07Fh - для дискет-
ного дисковода, 80h - 0FFh - для
" винчестера " .
ES : BX = адрес буфера, в который будет
читаться информация из
секторов
Возврат : CF = 0
AH = 0
AL = количество прочитанных секторов
При ошибке :
CF = 1
AH = байт состояния .


*
Биты регистра CX 5...0 определяют номер сектора,
а биты 15...6 - номер дорожки !!!
Это выглядит так :

____________________________________________
| Номер бита |15 |14 |13 |12 |11 |10 | 9 | 8 |
|------------|---|---|---|---|---|---|---|---|
| Содержимое | | | | | | | | |
| бита |c |c |c |c |c |c |c |c |
|____________|___|___|___|___|___|___|___|___|

____________________________________________
| Номер бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|------------|---|---|---|---|---|---|---|---|
| Содержимое | | | | | | | | |
| бита |C |c |S |s |s |s |s |s |
|____________|___|___|___|___|___|___|___|___|

Буква " C " или " c " означает, что бит при-
надлежит номеру дорожки;
Буква " S " или " s " означает, что бит при-
надлежит номеру сектора.

Таким образом, биты "7" и "6" являются старши-
ми битами номера дорожки, а биты "5" и "4" яв-
ляются старшими битами номера сектора.

Прерывание INT 13h, функция 03h - запись сектора.
Записывает один или несколько определенных пользо-
вателем секторов на физический диск .Для начально-
го сектора указываются такие координаты : дорожка,
сектор, головка .Секторы на дорожке нумеруются от
единицы, дорожки и головки нумеруются от нуля .
Вызов : AH = 03h
AL = количество записываемых секторов
CH = дорожка
CL = начальный сектор
DH = головка
DL = дисковод ( 00h - 07Fh - для дискет-
ного дисковода, 80h - 0FFh - для
" винчестера " .
ES : BX = адрес буфера,информация из ко-
торого будет записываться
в сектора
Возврат : CF = 0
AH = 0
AL = количество записанных секторов
При ошибке :
CF = 1
AH = байт состояния .

*
Биты регистра CX 5...0 определяют номер сектора,
а биты 15...6 - номер дорожки !!!
( см функцию 02h ).

Прерывание INT 13h, функция 08h - получение пара-
метров дисковода.
Вызов : AH = 08h
DL = дисковод ( 00h - 07Fh - для дискет-
ного дисковода, 80h - 0FFh - для
" винчестера " .
Возврат : AH = 0
BL = тип дисковода ( только AT и PS2 )
DL = количество накопителей, обслуживае-
мых первым контроллером
DH = максимальный номер головки
CL = максимальный номер сектора
CH = максимальный номер дорожки
( см. функцию 02h )
ES : DI = адрес таблицы параметров дис-
ковода
При ошибке :
CF = 1
AH = байт состояния .


*
Функция не работает на IBM XT для дисководов !!!

ПРИЛОЖЕНИЕ 2

Формат загрузочной записи для MS DOS
различных версий

Формат BOOT - записи для версий MS DOS до 4.0

________________________________________________
|Смещение |Размер | Содержимое |
| ( HEX ) |( DEC )| |
|---------|-------|------------------------------|
|00h |03 |Команда EB xx 90 перехода на |
| | |программу начальной загрузки |
|---------|-------|------------------------------|
|03h |08 |Название фирмы - производителя|
| | |и номер операционной системы |
|---------|-------|------------------------------|
|0Bh |13 |Блок параметров BIOS ( BPB ) |
|---------|-------|------------------------------|
|18h |02 |Количество секторов на дорожке|
|---------|-------|------------------------------|
|1Ah |02 |Количество поверхностей диска |
|---------|-------|------------------------------|
|1Ch |02 |Количество скрытых секторов, |
| | |которые иногда используются |
| | |для разбиения диска на разделы|
|---------|-------|------------------------------|
|1Eh |480 |Программа начальной загрузки, |
| | |называемая загрузочной записью|
| | |(Boot Record). |
|---------|-------|------------------------------|
|1FEh |02 |Код : 55 AA |
|_________|_______|______________________________|

Формат BOOT - записи для версии MS DOS 4.0

________________________________________________
|Смещение |Размер | Содержимое |
| ( HEX ) |( DEC )| |
|---------|-------|------------------------------|
|00h |03 |Команда EB xx 90 перехода на |
| | |программу начальной загрузки |
|---------|-------|------------------------------|
|03h |08 |Название фирмы - производителя|
| | |и номер операционной системы |
|---------|-------|------------------------------|
|0Bh |25 |Расширенный блок параметров |
| | |BIOS ( EBPB ) |
|---------|-------|------------------------------|
|24h |01 |Физический номер дисковода |
| | |( 00h - для дискетного диско- |
| | |вода, 80h - для винчестера ) |
|---------|-------|------------------------------|
|25h |01 |Зарезервировано |
|---------|-------|------------------------------|
|26h |01 |Символ " ) " - признак расши- |
| | |ренной загрузочной записи |
| | |MS DOS 4.0 |
|_________|_______|______________________________|
|27h |04 |Серийный номер диска,создается|
| | |во время его форматирования |
|---------|-------|------------------------------|
|2Bh |11 |Метка ( Volume Label ) диска, |
| | |задается во время его форма- |
| | |тирования |
|---------|-------|------------------------------|
|36h |08 |Обычно содержит запись типа |
| | |" FAT 12 " или аналогичную |
|_________|_______|______________________________|
|3Eh |448 |Программа начальной загрузки, |
| | |называемая загрузочной записью|
| | |(Boot Record). |
|---------|-------|------------------------------|
|1FEh |02 |Код : 55 AA |
|_________|_______|______________________________|

Формат Master Boot Record ( MBR ) - главной
загрузочной записи жесткого диска

________________________________________________
|Смещение |Размер | Содержимое |
| ( HEX ) |( DEC )| |
|---------|-------|------------------------------|
|00h |446 |Программа, называемая |
| | |главной загрузочной записью |
| | |(MBR, или Master Boot Record).|
|---------|-------|------------------------------|
|1BEh |16 |Элемент таблицы разделов диска|
|---------|-------|------------------------------|
|1CEh |16 |Элемент таблицы разделов диска|
|---------|-------|------------------------------|
|1DEh |16 |Элемент таблицы разделов диска|
|---------|-------|------------------------------|
|1EEh |16 |Элемент таблицы разделов диска|
|---------|-------|------------------------------|
|1FEh |02 |Код : 55 AA |
|_________|_______|______________________________|

Формат BPB для версий MS DOS до 4.0

________________________________________________
|Смещение |Размер | Содержимое |
| ( HEX ) |( DEC )| |
|---------|-------|------------------------------|
|00h |02 |Количество байтов |
| | |в одном секторе диска |
|---------|-------|------------------------------|
|02h |01 |Количество секторов |
| | |в одном кластере |
|---------|-------|------------------------------|
|03h |02 |Количество зарезервированных |
| | |секторов |
|---------|-------|------------------------------|
|05h |01 |Количество копий FAT |
|---------|-------|------------------------------|
|06h |02 |Максимальное количество дес- |
| | |крипторов файлов, содержащихся|
| | |в корневом каталоге диска |
|---------|-------|------------------------------|
|08h |02 |Общее количество секторов на |
| | |носителе данных в разделе DOS |
|_________|_______|______________________________|
|0Ah |01 |Байт - описатель среды носи- |
| | |теля данных |
|---------|-------|------------------------------|
|0Bh |02 |Количество секторов,занимаемых|
| | |одной копией FAT |
|_________|_______|______________________________|

Формат EBPB

________________________________________________
|Смещение |Размер | Содержимое |
| ( HEX ) |( DEC )| |
|---------|-------|------------------------------|
|00h |02 |Количество байтов |
| | |в одном секторе диска |
|---------|-------|------------------------------|
|02h |01 |Количество секторов |
| | |в одном кластере |
|---------|-------|------------------------------|
|03h |02 |Количество зарезервированных |
| | |секторов |
|---------|-------|------------------------------|
|05h |01 |Количество копий FAT |
|---------|-------|------------------------------|
|06h |02 |Максимальное количество дес- |
| | |крипторов файлов, содержащихся|
| | |в корневом каталоге диска |
|---------|-------|------------------------------|
|08h |02 |Общее количество секторов на |
| | |носителе данных в разделе DOS |
|_________|_______|______________________________|
|0Ah |01 |Байт - описатель среды носи- |
| | |теля данных |
|---------|-------|------------------------------|
|0Bh |02 |Количество секторов,занимаемых|
| | |одной копией FAT |
|_________|_______|______________________________|
|0Dh |02 |Количество секторов |
| | |на дорожке |
|---------|-------|------------------------------|
|0Fh |02 |Количество головок накопителя |
|---------|-------|------------------------------|
|11h |02 |Количество скрытых секторов |
| | |для раздела,который по размеру|
| | |меньше 32 - х Мегабайт |
|---------|-------|------------------------------|
|13h |02 |Количество скрытых секторов |
| | |для раздела,который по размеру|
| | |превышает 32 Мегабайта |
| | |( Используется только в |
| | |MS DOS 4.0 ) |
|---------|-------|------------------------------|
|15h |04 |Общее количество секторов на |
| | |логическом диске для раздела, |
| | |который по размеру превышает |
| | |32 Мегабайта |
|_________|_______|______________________________|

Параметры дискет различных типов
( В таблицу не вошли данные о совсем старых диске-
тах с объемом 320 Kb, 180 Kb, 120 Kb и других ) :

________________________________________________
|Диаметр | | | | | |
|диска | 3.5" | 3.5" | 3.5" | 5.25" | 5.25 " |
|----------|------|------|------|-------|--------|
|Емкость | | | | | |
|диска, Kb | 2880 | 1440 | 720 | 1200 | 360 |
|----------|------|------|------|-------|--------|
|Media | | | | | |
|Descryptor| F0h | F0h | F9h | F9h | FDh |
|----------|------|------|------|-------|--------|
|Количество| | | | | |
|сторон | 2 | 2 | 2 | 2 | 2 |
|----------|------|------|------|-------|--------|
|Количество| | | | | |
|дорожек | 80 | 80 | 80 | 80 | 40 |
|на стороне| | | | | |
|----------|------|------|------|-------|--------|
|Количество| | | | | |
|секторов | 36 | 18 | 9 | 15 | 9 |
|на дорожке| | | | | |
|----------|------|------|------|-------|--------|
|Размер | | | | | |
|сектора | 512 | 512 | 512 | 512 | 512 |
|----------|------|------|------|-------|--------|
|Количество| | | | | |
|секторов | 2 | 1 | 2 | 1 | 2 |
|в кластере| | | | | |
|----------|------|------|------|-------|--------|
|Длина FAT | | | | | |
|в секторах| 9 | 9 | 3 | 7 | 2 |
|----------|------|------|------|-------|--------|
|Количество| | | | | |
|копий FAT | 2 | 2 | 2 | 2 | 2 |
|----------|------|------|------|-------|--------|
|Длина | | | | | |
|корневого | | | | | |
|каталога | 15 | 14 | 7 | 14 | 7 |
|в секторах| | | | | |
|__________|______|______|______|_______|________|

ПРИЛОЖЕНИЕ 3

КОДЫ ОШИБОК ПРИ ВЫПОЛНЕНИИ ФУНКЦИЙ
MS DOS и BIOS

00h - Ошибки нет
01h - Неправильный номер функции
02h - Файл не найден
03h - Путь не найден
04h - Слишком много открытых файлов
05h - Доступ запрещен
06h - Неправильный дескриптор
07h - Уничтожен блок управления памятью ( MCB -
блок)
08h - Не хватает памяти
09h - Неправильный адрес блока памяти
0Ah - Неправильное окружение
0Bh - Неправильный формат
0Ch - Неправильный код доступа
0Dh - Неправильные данные
0Eh - Неизвестное устройство
0Fh - Неправильный дисковод
10h - Попытка удалить текущий каталог
11h - Не то же устройство
12h - Больше нет файлов
13h - Диск защищен от записи
14h - Неизвестное устройство
15h - Дисковод не готов
16h - Неизвестная команда
17h - Ошибка контрольной суммы
19h - Ошибка поиска дорожки
1Ah - Неизвестный носитель
1Bh - Сектор не найден
1Ch - В принтере нет бумаги
1Dh - Отказ записи
1Eh - Отказ чтения
1Fh - Общая ошибка
50h - Файл уже существует
52h - Не могу создать каталог
54h - Слишком много перенаправлений
55h - Двойное перенаправление
57h - Неправильный параметр

--------------------------------------------------

КОДЫ ОШИБОК ПРИ ВЫПОЛНЕНИИ ФУНКЦИЙ BIOS

00h - Ошибки нет
01h - Неправильная команда
02h - Не найдена адресная метка
03h - Диск защищен от записи
04h - Сектор не найден
05h - Сброс жесткого диска не прошел
06h - Дискета вынута
07h - Неправильная таблица параметров
жесткого диска ( HDPT - Hard Disk Parame-
ter Table )
0Ch - Не найден тип носителя данных
0Dh - Неправильное число секторов в формате на
жестком диске
10h - Невосстановимая ошибка данных
11h - Восстановленная ошибка данных на жестком
диске
20h - Неисправность контроллера
40h - Ошибка позиционирования
80h - Тайм - аут диска
AAh - Жесткий диск не готов
BBh - Неизвестная ошибка жесткого диска

ЛИТЕРАТУРА

1. Финогенов К .Г
" Самоучитель по системным функциям
MS DOS ", М.:Малип, 1993

2. П .Абель
" Язык ассемблера для IBM PC и про-
граммирования ", М.:Высшая школа,

1991


3. Хижняк П .Л
" Пишем вирус... и антивирус ! ",
М.: Инфо, 1991

4. Касаткин А .И
" Профессиональное программирова-
ние на языке СИ .Управление ре-
сурсами ", Минск, Вышейшая шко-
ла, 1992

5. Самофалов К .Г, Викторов О .В
" Микропроцессоры ",М.:Библиотека ин-
женера, 1990

г. Житомир, 18.08.1998
И. Коваль

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

__________________________________________________
ПИШИТЕ ВИРУСЫ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН, КАК УЧИТ
НАС КОММУНИСТИЧЕСКАЯ ПАРТИЯ !!!
--------------------------------------------------

Украина
г. Житомир
ул. Большая Бердичевская, д. 83, кв. 25
Коваль Игорь Михайлович
тел. 8 (0412) 343427
8 (0412) 204218
Индекс : 262002

Список страниц

Закладка в соц.сетях

Купить

☏ Заказ рекламы: +3805044-68-872

© Ассоциация электронных библиотек Украины

☝ Все материалы сайта (включая статьи, изображения, рекламные объявления и пр.) предназначены только для предварительного ознакомления. Все права на публикации, представленные на сайте принадлежат их законным владельцам. Просим Вас не сохранять копии информации.