Истории о вирусах

         

Адреса и номера функций


Для June Test Release KERNEL32 находится по адресу OBFF93B95h, для

August Release - по адресу OBFF93ClDh. Можно найти другие значе-

ния функции, используя 32-битный отладчик. В таблице 3.1 приведены

адреса функций, которые нужны для работы вируса.

Таблица 3.1. Адреса некоторых функций KERNEL

Функция Адрес в June Test Release Адрес в August Test

Release

GetCurrentDir BFF77744h BFF77744h
SetCurrentDir BFF7771Dh BFF7771Dh
GetTime BFF9DOB6h BFF9D14Eh
MessageBox BFF638D9h BFF638D9h
FindFile BFF77893h BFF77893h
FindNext BFF778CBh BFF778CBh
CreateFile BFF77817h BFF77817h
SetFilePointer BFF76FAOh BFF76FAOh
ReadFile BFF75806h BFF75806h
WriteFile BFF7580Dh BFF7580Dh
CloseFile BFF7BC72H BFF7BC72h



AMI Flash вирус


Алгоритм работы вируса:

1. Проверить компьютер на наличие Flash BIOS;

2. Проверить Flash BIOS на зараженность (осуществить выход, если

она заражена);

3. Считать вектор INT 19h из таблицы (прерывание загрузки);

4. Прочесть первые 5 байт от точки входа INT 19h;

5. Проверить BIOS на наличие свободного места для размещения ви-

руса (поиск области нулей);

6. Установить память Flash BIOS в режим записи (обычно она нахо-

дится в режиме "Readonly");

7. Записать вирус в найденную область нулей;

8. Записать переход на вирус в точку входа INT 19h;

9. Восстановить режим "Readonly" для памяти Flash BIOS.

Единственное предназначение INT 19h - быть вызванным в процессе

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

ние. Прерывание именно то, которое и требуется изменить.

Нужно иметь в виду, что одновременно читать из памяти Flash BIOS и

записывать в нее нельзя. Поэтому во время работы вируса нельзя ис-

пользовать временные переменные в этой памяти. Более целесообразным

является создание вируса для обычного boot-сектора. Этот вирус следу-

ет поместить в конец памяти и оттуда устанавливать вектор INT 13h.

AMI BIOS обладает своими специфическими особенностями при разме-

щении в микросхемах Flash-памяти, которые базируются на использова-

нии функции EOh прерывания INT 16h. Самое интересное состоит

в том, что однажды внесенный в эту память вирус может запретить по-

вторно использовать указанную функцию. Это запретит антивирусным

программам воспользоваться ею в процессе удаления вируса из BIOS

компьютера. Исходя из этого, авторам антивирусных программ придет-

ся трассировать INT 16h, чтобы получить оригинальный вектор.



BBS И FTN-СЕТИ


5 этой главе описаны методы

взлома BBS и FTN-сетей, как

программные, так и "обман-

ные", Представлен исходный

текст программы-взломщика

с комментариями. Подробно

рассказано о "слабых мес-

тах" различных программ для

BBS и FTN-сетей. Даются ре-

комендации по защите компь-

ютера от несанкционирован-

ного проникновения.

BBS - Bulletin Board System (электронная доска объявлений). Это не-

большой информационный центр на базе микрокомпьютера (с винчес-

тером большого объема), к которому пользователи могут подключиться

через свой компьютер по телефонной сети в режиме точка - точка.

Работая с BBS, пользователи могут не только скопировать оттуда име-

ющийся файл, но и оставить свой. Файлом может являться как письмо,

так и обычная программа. Как правило, BBS работает в ночное время,

а днем это обычный телефонный номер. Главным на BBS является сис-

темный оператор (SysOp), который и назначает ее правила и тематику.

Услуги BBS часто являются бесплатными, для связи с ней достаточно

обычной терминальной программы. При первом входе нужно зарегист-

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

мени для работы. Часто выделяемого времени недостаточно, тогда появ-

ляется потребность к взлому BBS. О том, как надо звонить на подобные

BBS, как получать оттуда файлы и писать письма, можно узнать в спе-

циальной литературе. Поставленная задача - рассказать читателю, ка-

ким образом можно повысить себе уровень доступа или получить пол-

ный доступ к компьютеру. Для системных операторов это будет

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

мотности...



Безопасность вашей BBS


Если у вас дома стоит собственная BBS или вы только собираетесь

ее открыть, сначала нужно позаботиться о ее безопасности.

Во-первых, прежде чем создать свою BBS, надо выбрать программу для

нее. Чем больше возможностей предоставляет программа, тем больше

всевозможных лазеек, которыми может воспользоваться хакер. В Maxi-

mus эти лазейки уже описаны - лучше всего не пользоваться этой про-

граммой. Если Maximus все-таки используется, лучше не устанавливать

Ш больше никаких дополнительных утилит, поскольку именно они могут

•I, послужить предпосылкой проникновения хакера на BBS. DOS-SHELL

1В1 луиис сразу убрать с BBS. Никогда никому нельзя раскрывать свои па-

1В {1али' копировать информацию о пользователях также не стоит. Береги-

¦В Т^5 троянских программ, копируемых пользователями. Их можно про-

¦н¦ верять либо отладчиками, либо дизассемблером, другого способа нет,

¦В разве что не запускать их совсем.

Особое внимание нужно уделить директориям. Никогда не устанавли-

вайте программный продукт в директорию, предлагаемую программой

по умолчанию. Это, несомненно, может облегчить работу любой троян-

ской программе. Также не стоит запускать маленькие файлы, попавшие

на станцию извне. Обычно такие программы и являются "бомбами оп-

ределенного действия".

Вообще лучшая защита - это нападение. Дело в том, что хакерами мно-

гие называют себя совершенно безосновательно. Хакер по заказу фир-

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

которые могут быть использованы подобными взломщиками. То есть

хакер ищет "дыры", а компания их закрывает. Таким образом, суще-

ствуют системы, которые взломать практически невозможно.



Блокировщик вируса


Рассмотрим пример. В дисплейном классе ВУЗа эпидемия, часть машин

заражена неизвестным вирусом. До конца сессии - несколько дней,

выключение машин из учебного процесса смерти подобно (в первую

очередь для обслуживающих класс сотрудников). Ситуация усугубляет-

ся тем, что студенты постоянно переносят программы на дискетах с од-

ной машины на другую. Как ограничить распространение эпидемии,

пока вирус не уничтожен?

Выход - написать антивирус-блокировщик. Практически все резидентные

вирусы определяют факт своего наличия в памяти машины, вызывая ка-

кое-либо программное прерывание с "хитрыми" параметрами. Если напи-

сать простую резидентную программу, которая будет имитировать нали-

чие вируса в памяти компьютера, правильно "отзываясь на пароль",

то вирус, скорее всего, сочтет эту машину уже зараженной. Даже если не-

которые файлы на машине содержат в себе код вируса, в случае исполь-

зования блокировщика заражения всех остальных файлов не произойдет.

Разумеется, надо попытаться запустить блокировщик раньше всех ос-

тальных программ, например, в файле config.sys:

install c:\util\stopsvc.com

Но если вирус успел заразить command.com или стартует из загрузочно-

го сектора, то антивирус-блокировщик не поможет.



Борьба с антивирусными мониторами


Современные антивирусные мониторы умеют отслеживать факт прямо-

го обращения программ к DOS.

Защиту 21-го прерывания можно организовать более эффективно, ис-

пользуя метод встраивания в ядро операционной системы. Общеприня-

тая схема такова: в точку входа прерывания INT 21h записывается инст-

рукция JMP FAR на обработчик, который проверяет номер функции на

безопасность. Он восстанавливает оригинальные инструкции в точке вхо-

да прерывания и вызывает обработчик INT 21h. После возврата управле-

ния из прерывания, в точку входа снова записывается инструкция JMP

FAR, и управление передается программе, вызвавшей INT 21h.

Здесь описан обычный "сплайсинг" (встраивание), который широко

применяется разработчиками вирусов. Отметим, что для перехода не

обязательно использовать инструкцию JMP FAR (она занимает 5 байт

в памяти и не везде может быть размещена). Вместо нее можно приме-

нить INT 3, затратив всего 1 байт. В то же время необходимо обеспе-

чить обработку вызовов с кодами OOh, 4Ch, 31h (они не возвращают уп-

равление в исходную точку), а также самовызовов (при завершении

процессов посредством INT 27h и INT 20h).

Процесс развивается следующим образом. Первый компонент антивирус-

ного монитора встраивается в ядро DOS, а второй - просто перехватыва-

ет цепочку 21-го прерывания. Когда программа выполняет инструкцию

INT 21h, управление передается второму компоненту. У антивирусных

мониторов существует список функций, которые воспринимаются ими

как опасные. Они могут сделать проверку на наличие заданной функ-

ции в этом списке, затем выставить флаг "проход цепочки" и передать

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

проверяет флаг "прохода цепочки". Если он выставлен, то была инст-

рукция INT 21h, поэтому необходимо сбросить флаг "проход цепочки"

и передать управление в DOS. Если флаг сброшен, это значит, что был

5 - 1436

выполнен прямой вызов. В этом случае требуется принимать соответ-

ствующие меры против возможных действий вируса.

Эта идея исключительно проста и эффективна. В том или ином виде ее

применяют почти все современные антивирусные мониторы. Вот один

из таких вариантов.

После трассировки прерывания выполняется обращение к DOS по

оригинальному адресу. Программа AVPTSR перехватывает обращение.

Точнее, AVPTSR перехватывает INT 2Ah, причем этот вызов произве-

ден из INT 21h, вблизи начала фрагмента. Обработчик INT 08h,

то есть таймера, периодически восстанавливает вектор 2Ah, если он

был отключен.

Подразумевается, что флаг прохода цепочки 21-го прерывания проверя-

ется в обработчике INT 2Ah.



Что "помнит" компьютер


Некоторые программы обладают на редкость большим количеством все-

возможных "черных ходов", "люков", "багов" и так далее. Вот лишь не-

которые примеры:

- Microsoft Outlook Express 4.0 - все письма, которые когда-либо были

отправлены, получены или удалены, он все равно хранит в своей

базе. Поэтому рекомендуется периодически удалять (лучше невосста-

новимыми методами, например, с помощью программы Kremlin 2.1)

эти файлы. Они расположены в следующих директориях:

\Windows\Aplication\Microsoft\Outlook Express\Mail\ - почта,

здесь необходимо удалить все файлы с расширениями IDX и МВХ.

\Wmdows\Aplication\Microsoft\Outlook Express\News\ - новости,

здесь необходимо удалить все файлы с расширениями NCH.

Удалить из базы все удаленные сообщения можно также с помощью

опции "Сжать папки".

- Microsoft Internet Explorer 4.0:

\Windows\Cookies\ - хранит файлы Cookies (их лучше периодичес-

ки удалять с помощью программы Kremlin 2.1).

\Windows\Temporary Internet Files\ - хранит все адреса, которые

посещались в Интернет (их лучше периодически удалять с помо-

щью программы Kremlin 2.1).

- Microsoft Windows 95:

\Windows\History\ - хранит все файлы истории (их лучше перио-

дически удалять с помощью программы Kremlin 2.1).

\Windows\name.pwl - в этих файлах Windows хранит имена, теле-

фоны и пароли для соединения с Интернет, все они легко (с помо-

щью специальных программ) расшифровываются.

\Wmdows\Pronles\name\ - (вместо name будет указано имя пользо-

вателя) хранит профили и все установки конкретных пользователей

(это, кстати, справедливо и для Windows NT)

\Windows\Aplication\Microsoft\Outlook Express\Mail\ - почта

\Windows\Aplication\Microsoft\Outlook Express\News\ - новости

\Windows\Aplication\Microsoft\Address Book\ - адресная книга

\Windows\Cookies\ - файлы Cookies

\Windows\Favorites\ - файлы закладок Интернет

\Windows\History\ - файлы истории Windows

\Windows\user.dat - параметры пользователя

\Windows\user.daO - резерв

Большинство FTP-клиентов сохраняют в специальной директории все

места в Интернет, которые посещались пользователем (а иногда сохра-

няют и нешифрованные имена и пароли). В целях безопасности целесо-

образно периодически (скажем, раз в неделю) стирать содержимое

кэша. Например, в Bullet Proof FTP (одной из лучших программ, полу-

чить которую можно на сервере http://www.bpftp.com), он располагает-

ся в директории Cache. Лучше производить невосстановимое удаление,

например, с помощью программы Kremlin 2.1.



Device=himem. sys dos=high


Точка О 0123:109Е 9090

Точка 1 FDC8:40F8 80FA

Точка 2 FDC8:411B1E06

Точка 2А FDC8:41D12ACD



DOS


6.20

dos=high

Точка О 0123:109Е ОЗЕВ

Точка 1 03AC:40F8 80FA

Точка 2 ОЗАС:411В 1Е06

Точка 2А 03AC:41D1 2ACD


5.0

Точка 1 002А:40ЕВ 80FA

Точка 2 002А:410Е 1Е06

Точка 2А 002A:41D1 2ACD



является оптимальной, то есть



Точка 0 0070:17DO

Точка 2 является оптимальной, то есть в нее целесообразнее всего пере-

давать управление, чтобы обойти резидентные антивирусные мониторы.

Точка 2А - это позиция инструкции INT 2Ah, которую DOS обязатель-

но выполняет в процессе обработки 21-го прерывания.

В конце каждой строки приведены контрольные слова - на тот случай,

если по указанному адресу находится нечто иное.


Точка 2А



Точка О 0070:05DC 892E

Точка 1 0294:1460 ЗА2Е

Точка 2 0294:1480

Точка 2А 0294:151 В 2ACD


Точка 2А



dos=high

Точка О 0123:109Е ОЗЕВ

Точка 1 03AC:40F8 80FA

Точка 2 ОЗАС:411В 1Е06

Точка 2А 03AC:41D1 2ACD


Точка 2А



Точка 1 002A:40F8 SOFA

Точка 2 002А:411В 1Е06

Точка 2А 002A:41D1 2ACD


DOS 7.0 (русская версия)


Точка О OOC9:OFB2 9090

Точка 1 FF03:41E7 80FA

Точка 2 FF03:420A 1E06

Точка 2А FF03:5333 2ACD



DOS, функция 1Ah Установить адрес DTA


Вход:

AH=lAh

DS:DX - адрес DTA

Описание.

Устанавливает адрес DTA. Все FCB-ориентированные операции работа-

ют с DTA. DOS не позволяет операциям ввода/вывода пересекать гра-

ницу сегмента. Функции поиска llh, 12h, 4Eh и 4Fh помещают данные

в DTA. DTA глобальна, поэтому надо проявлять осторожность при на-

значении ее в рекурсивной процедуре. При запуске программы ее DTA

устанавливается по смещению 80h относительно PSP.



DOS, функция 1Bh Получить информацию FAT для текущего диска


Вход:

AH°lBh

Выход:

DS:BX - адрес байта FAT ID, отражающего тип диска (Таблица Б-3)

DX - всего кластеров (единиц распределения) на диске

AL - секторов на кластер

СХ - байт на сектор

Таблица Б-3. Значения ID.

ID Описание
FFh Floppy, 2 стороны, 8 секторов на дорожку (320Кбайт)
FEh Floppy, 1 сторона, 8 секторов на дорожку (160Кбайт)
FDh Floppy, 2 стороны, 9 секторов на дорожку (360Кбайт)
FCh Floppy, 1 сторона, 9 секторов на дорожку (180Кбайт)
F9h Floppy, 2 стороны, 15 секторов на дорожку (1,2Мбайт)
F8h Жесткий диск
FOh Другой

Описание.

Возвращает информацию о размере и типе текущего диска. Размер дис-

ка (в байтах) равен DX*AL*CX. Свободную память можно найти функ-

циями 36h или 32h.

Версии:

DOS l.x держит FAT в памяти и возвращает DS:BX => FAT.

DOS 2.0+ может держать в памяти лишь часть всей FAT.

Примечание.

Эта функция изменяет содержимое регистра DS.



DOS, функция 1Ch Получить информацию FAT для указанного диска


Вход:

АН-1Ch

DL - номер диска (0 - текущий, 1 - А и так далее)

Выход:

DS:BX - адрес байта FAT ID, отражающего тип диска (приведен в опи-

сании функции IBh)

DX - всего кластеров (единиц распределения)

AL - секторов на кластер

СХ - байт на сектор

Описание.

Аналогична функции IBh с той разницей, что регистр DL указывает

диск, для которого нужно получить информацию.



DOS, функция 01h Считать со стандартного устройства ввода


Вход:

AH°01h

Выход:

AL - символ, полученный из стандартного ввода

Описание.

Считывает (ожидает) символ со стандартного входного устройства.

Отображает этот символ на стандартное выходное устройство (эхо).

При обнаружении Ctrl-Break выполняется INT 23h.

Примечание.

Ввод расширенных клавиш ASCII (F1-F12, PgUp, курсор и другие) тре-

бует двух обращений к этой функции. Первый вызов возвращает AL=0.

Второй вызов возвращает в AL расширенный код ASCII.



DOS, функция 2Ah Получить системную дату


Вход:

АН-2АН

Выход:

AL - день недели (0 - воскресенье, 1 - понедельник, ... 6 - суббота),

DOS 3.0+

СХ - год (от 1980 до 2099)

DH - месяц (1 до 12)

DL - день (1 до 31)

Описание.

Возвращает текущую дату, которая известна системе.

Версии.

DOS 2.x не гарантирует возврата в AL значения дня.

DOS 1.0+ возвращает правильный день недели.

Версии до 2.1 имеют проблемы с переходом через дату.



DOS, функция 2Bh Установить системную дату


Вход:

AH=2Bh

СХ - год (от 1980 до 2099)

DH - месяц (от 1 до 12)

DL - день (от 1 до 31)

Выход:

AL=OOh, если дата корректна ,

AL=FFh, если дата некорректна и не изменена

Описание. ,

Устанавливает системную дату DOS.



DOS, функция 2Ch Получить время DOS


Вход:

AH°2Ch

Выход:

СН - часы (от 0 до 23)

CL - минуты (от 0 до 59)

DH - секунды (от 0 до 59)

DL - сотые доли секунды (от 0 до 99)

Описание.

Возвращает текущее время, которое известно системе.

Примечание.

Поскольку системные часы имеют частоту 18.2 Гц (интервал 55мс),

DL имеет точность примерно 0.04 сек.



DOS, функция 2Dh Установить время DOS


Вход:

AH-2Dh

СН - часы (от 0 до 23)

CL - минуты (от 0 до 59)

DH - секунды (от 0 до 59)

DL - сотые доли секунды (от 0 до 99)

Выход:

AL=OOh, если время корректно

AL^FFh, если время некорректно и не изменено

Описание.

Устанавливает системное время DOS.



DOS, функция 2Eh Установить/сбросить переключатель верификации


Вход:

AH^Eh

AL=OOh - отключить верификацию

AL=01h - включить верификацию

Описание.

Задает, должна ли DOS верифицировать (считывать обратно) каждый

сектор, записываемый на диск. Это замедляет операции записи на диск,

но гарантирует максимальную надежность записи.



DOS, функция 2Fh Получить адрес текущей DTA


Вход:

AH=2Fh

Выход:

ES:BX - адрес начала текущей DTA

Описание.

Возвращает адрес начала области ввода-вывода (DTA). Поскольку DTA

глобальна для всех процессов, в рекурсивной процедуре (например, при

проходе по дереву оглавления) может потребоваться сохранить адрес

DTA, а впоследствии восстановить его посредством функции lAh.

Примечание.

Эта функция изменяет сегментный регистр ES.

Версии: DOS 2.00 и выше



DOS, функция 02h Записать в стандартное устройство вывода


Вход:

AH=02h

DL - символ, выводимый в стандартный вывод

Описание.

Посылает символ из DL в стандартное устройство вывода. Обрабатыва-

ет символ Backspace (ASCII 8), перемещая курсор влево на одну пози-

цию и оставляя его в новой позиции. При обнаружении Ctrl-Break вы-

полняется INT 23h.



DOS, функция 3Ah Удалить оглавление


Вход:

АН-ЗАЬ

DS:DX - адрес строки ASCIZ с именем оглавления

Выход:

CF=0, если функция выполнена успешно

АХ не сохранен

CF=1, если при выполнении функции возникли ошибки

АХ - код ошибки

Описание.

Если диск и/или корневой путь не указаны, принимаются значения по

умолчанию. Поддиректория удаляется из структуры оглавлений. Если

флаг CF установлен при возврате, то АХ содержит код ошибки, и оглав-

ление не удаляется.

Примечание.

Оглавление не должно содержать файлов и поддиректорий, оно не должно

попадать под влияние возможных ограничений DOS (например, не долж-

но быть задействовано в активных командах JOIN или SUBST).

Версии: DOS 2.00 и выше.



DOS, функция 3Bh Установить текущую директорию


Вход:

АН-ЗВЬ

DS:DX - адрес строки ASCIZ с именем оглавления

Выход:

CF=0, если функция выполнена успешно

АХ не сохранен

CF=1, если при выполнении функции возникли ошибки

АХ - код ошибки

Описание.

Если диск и/или корневой путь не указаны, принимаются значения по

умолчанию. Указанная поддиректория становится текущим оглавлени-

ем DOS для этого (или текущего) диска. Если флаг CF установлен при

возврате, то АХ содержит код ошибки, и текущее оглавление для выб-

ранного диска не изменяется.

Версии: DOS 2.00 и выше.



DOS, функция 3Ch Создать файл через описатель


Вход:

АН-ЗСЬ

DS:DX - адрес строки ASCIZ с именем файла

СХ - атрибут файла (атрибуты приведены в описании функции

DOS 43h)

Выход:

CF=0, если функция выполнена успешно

АХ - описатель файла

CF=1, если при выполнении функции возникли ошибки

АХ - код ошибки

Описание.

Если диск и/или путь не указаны, принимаются значения по умолчанию.

Версии: DOS 2.00 и выше.



DOS, функция 3Dh Открыть описатель файла


Вход:

AH=3Dh

DS:DX - адрес строки ASCIZ с именем файла

AL - режим открытия:

AL=OOh, чтобы открыть для чтения

AL=01h, чтобы открыть для записи

AL=02h, чтобы открыть для чтения и записи

Выход:

CF=0, если функция выполнена успешно

AX - описатель файла

CF=1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

Файл открывается в выбранном режиме доступа (режиме открытия).

Если диск и/или путь не указаны, принимаются указанные по умолча-

нию. Файл должен существовать. Указатель чтения/записи устанавли-

вается в ноль.

Версии: DOS 2.00 и выше.



DOS, функция 3Eh Закрыть описатель файла


Вход:

АН-ЗЕЬ

ВХ - описатель файла

Выход:

CF=0, если функция выполнилась успешно

АХ не сохранен

CF=1, если при выполнении функции возникли ошибки

АХ - код ошибки

Описание.

ВХ содержит описатель файла (handle), возвращенный при открытии.

Файл, представленный этим описателем, закрывается, его буферы сбра-

сываются и оглавление обновляется корректными размером, временем

и датой. Из-за недостатка описателей файлов (максимум 20, по умолча-

нию установлено 8), возможно, придется закрыть часть текущих описа-

телей, как, например, описатель 3 (стандартный AUX).

Версии: DOS 2.00 и выше.



DOS, функция 3Fh Читать файл через описатель


Вход:

AH=3Fh

ВХ - описатель файла

DS:DX - адрес буфера для чтения данных

СХ - число считываемых байт

Выход:

CF=0, если функция выполнена успешно

AX - число действительно прочитанных байт

CF=1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

СХ байт данных считываются из файла или устройства с описателем,

указанным в ВХ. Данные читаются с текущей позиции указателя чте-

ния/записи файла и помещаются в буфер вызывающей программы, ад-

ресуемый через DS:DX. Если необходимо установить позицию чтения/

записи, можно использовать функцию 42h. Эта функция обновляет ука-

затель чтения/записи файла, чтобы подготовиться к последующим опе-

рациям чтения или записи.

Версии: DOS 2.00 и выше.



DOS, функция 4Ah Изменить размер блока памяти


Вход:

АН°4АЬ

ES - сегмент распределенного блока памяти

ВХ - нужный размер блока в 16-байтных параграфах

Выход:

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

AX - код ошибки

ВХ - размер максимального доступного блока памяти (в параграфах)

Описание.

Изменяет размер существующего блока памяти. Когда программа полу-

чает управление, функция 4Bh уже распределила блок памяти, начиная

с PSP, который содержит всю доступную память. Чтобы освободить па-

мять для запуска порождаемых процессов, блок памяти, начинающийся

с PSP, необходимо сначала сжать.

Примечание.

Функция 31h и INT 27h (TSR) сжимают блок по адресу PSP.

Версии: DOS 2.00 и выше.



DOS, функция 4Bh Выполнить или загрузить программу


Вход:

AH"4Bh

DS:DX - адрес строки ASCIZ с именем файла, содержащего программу

ES:BX - адрес ЕРВ (блока параметров ЕХЕС)

AL=°OOh - загрузить и выполнить

AL=01h - загрузить, но не выполнять

AL=03h - загрузить программный оверлей

Выход:

CF=0, если функция выполнена успешно

ВХ, DX не сохранены

СЕ=1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

Данная функция загружает в память и запускает программу, имя кото-

рой указано в регистрах DS:DX. Запущенная программа после заверше-

ния работы возвратит управление запускаемой. Если диск или путь

не указаны, принимаются значения по умолчанию. ES:BX указывает

на блок памяти, подготовленный как ЕРВ, формат которого зависит

от запрошенной подфункции в AL.

Версии: DOS 2.00 и выше.



DOS, функция 4Ch Завершить программу


Вход:

AH=4Ch

AL - код выхода

Описание.

Возвращает управление от порожденного процесса его родителю, уста-

навливая код выхода (его можно опросить функцией 4Dh). Управление

передается по адресу завершения в PSP завершающейся программы.

Векторы Ctrl-Break и Critical Error восстанавливаются к старым адре-

сам, сохраненным в родительском PSP.

Примечание.

Значение ERRORLEVEL (используемое в пакетных файлах DOS)

можно использовать для проверки кода выхода самой последней про-

граммы.

Версии: DOS 2.00 и выше.



DOS, функция 4Dh Получить код выхода программы


Вход:

AH=4Dh

Выход:

АН - код выхода последнего завершившегося процесса

AH=OOh - нормальное завершение

AH=01h - завершение через Ctrl-Break INT 23h

AH=02h - завершение по критической ошибке устройства INT 24h

AH=03h - завершение через функцию 31h

AL - код выхода

Описание.

Возвращает код выхода последнего из завершившихся процессов. Эта

функция возвращает правильную информации/только однажды для

каждого завершившегося процесса.

Версии: DOS 2.00 и выше.



DOS, функция 4Eh Найти первый совпадающий файл


Вход:

АН-4ЕП

DS:DX - адрес строки ASCIZ с именем файла (допускается использо-

вать символы "?" и "*")

СХ - атрибут файла для сравнения

Выход:

CF^^O, если функция выполнена успешно

DTA заполнена данными (Таблица Б-10)

CF=1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

Если диск и/или путь не указаны, принимаются значения по умолча-

нию. Обобщенные символы "*" и "?" допускается использовать в име-

ни файла и расширении.

Версии: DOS 2.00 и выше.



DOS, функция 4Fh Найти следующий совпадающий файл


Вход:

AH-4Fh

DS:DX - адрес данных, возвращенных предыдущей 4Eh (Найти пер-

вый файл)

Выход:

CF=0, если функция выполнена успешно

DTA заполнена данными

CF°1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

Эту функцию можно использовать после вызова 4Eh. Следующее имя фай-

ла, совпадающее по обобщенному имени и атрибуту файла, копируется

в буфер по адресу DS:DX вместе с другой информацией (Таблица Б-10).

Примечание.

Параметр DS:DX добавлен в DOS 3.0.

Версии: DOS 2.00 и выше.



DOS, функция 04h Записать символ в стандартное вспомогательное устройство


Вход:

AH^h

DL - символ, выводимый в стандартное вспомогательное устройство

Описание.

Посылает символ, находящийся в регистре DL, на стандартное вспомо-

гательное устройство, COM1 или AUX.



DOS, функция 5Ah Создать уникальный временный файл


Вход:

AH=5Ah

DS:DX - адрес строки ASCIZ с диском и путем (заканчивается симво-

лом "\") \

СХ - атрибут файла

Выход:

CF=0, если функция выполнена успешно

AX - описатель файла

DS:DX - (не изменяется) полное ASCIZ-имя нового файла

CF=1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

Открывает (создает) файл с уникальным именем в каталоге, заданном

строкой ASCIZ, на которую указывает DS:DX. COMMAND.COM вызы-

вает эту функцию, когда создает временные "канальные" файлы, ис-

пользуемые при переназначении ввода-вывода. Описание пути должно

быть готово к добавлению в его конец имени файла. Необходимо обес-

печить минимум 12 байт в конце строки. Сама строка должна быть за-

полнена в одной из форм: "d:\nyrb\",0 (указан диск и путь), "d>,0 (те-

кущее оглавление диска) или "d:\",0 (корневое оглавление диска).

Версии: DOS 3.00 и выше.



DOS, функция 5Bh Создать новый файл


Вход:

AH-SBh

DS:DX - адрес строки ASCIZ с именем файла

СХ - атрибут файла

Выход:

CF=0, если функция выполнена успешно

AX - описатель файла

CF=1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

Файл открывается для чтения/записи в совместимом режиме доступа.

Если диск и/или путь не указаны, принимаются значения по умолча-

нию. Этот вызов идентичен функции DOS 3Ch с тем исключением, что

он вернет ошибку, если файл с заданным именем уже существует.

Версии: DOS 3.00 и выше.



DOS, функция 5Ch Блокировать/разблокировать доступ к файлу


Вход:

AH-SCh

AL - подфункция:

AL=OOh - заблокировать область файла

AL=01h - разблокировать ранее заблокированную область

ВХ - описатель файла

CX-.DX - смещение ((CX*65536)+DX) от начала файла

SLDI - длина блокируемой области ((SI*65536)+DI) байт

Выход:

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

Блокирует или освобождает доступ к участку файла, указанного в ВХ.

Область файла с логическим смещением CX:DX и длиной SLDI

блокируется (захватывается) или разблокируется (освобождается). Сме-

щение и длина обязательно должны быть указаны. Разделение файлов

должно быть активизировано (командой SHARE), иначе функция вернет

код ошибки "Неверный номер функции".

Версии: DOS 3.00 и выше (при обязательной загрузке SHARE).



DOS, функция 05h Вывести на принтер


Вход:

АН-ОЗЬ

DL - символ, записываемый на стандартный принтер

Описание.

Посылает символ в DL на стандартное устройство печати, обычно

LPT1.



DOS, функция 06h Консольный ввод-вывод


Вход:

AH=06h

DL=OOh-FEh - символ, посылаемый на стандартный вывод

DL=FFh - запрос ввода со стандартного ввода

Выход:

ZF=0, если осуществлялся ввод символа и символ готов при запросе ввода

AL - считанный символ

ZF=1, если осуществлялся ввод символа и символа в консоли нет

Описание.

При DL°=OFFh выполняет ввод с консоли "Без ожидания", возвращая

включенный флаг нуля ZF, если на консоли нет готового символа. Если

символ готов, сбрасывает флаг ZF и возвращает считанный символ в AL.

Если DL не равен OFFh, то DL направляется на стандартный вывод.



DOS, функция 07h Нефильтрующий консольный ввод без эха


Вход:

AH°07h

Выход:

AL - символ, полученный через стандартный ввод

Описание.

Считывает (ожидает) символ со стандартного входного устройства

и возвращает этот символ в AL. Не проверяет на Ctrl-Break, Backspace

и другие.

8- 1436

Примечание.

Для ввода расширенного символа ASCII должна быть вызвана дважды.

Для проверки статуса используется функция DOS OBh (чтобы не ожи-

дать нажатия клавиши).



DOS, функция 08h Консольный ввод без эха


Вход:

AH=08h

Выход:

AL - символ, полученный через стандартный ввод

Описание.

Считывает (ожидает) символ со стандартного входного устройства

и возвращает этот символ в AL. При обнаружении Ctrl-Break выполня-

ется прерывание INT 23h.

Примечание.

Для ввода расширенного символа ASCII должна быть вызвана дважды.



DOS, функция 09h Запись строки на стандартный вывод


Вход:

АН-09Н

DS:DX - адрес строки, заканчивающейся символом "$" (ASCII 24h)

Описание.

Строка, исключая завершающий ее символ "$", посылается на стандар-

тный вывод. Символы Backspace обрабатываются как в функции 02h

(вывод на дисплей). Чтобы перейти на новую строку, обычно включают

в текст пару CR/LF (ASCII ODh и ASCII OAh). Строки, содержащие

"$", можно передать на стандартное устройство вывода с помощью фун-

кции 40h (ВХ-0).



DOS, функция 10h Закрыть файл через FCB


Вход:

AH=10h

DS:DX - адрес открытого FCB (Таблица Б-2)

Таблица Б-2. Формат FCB.

Смещ. Размер Описание
-07h байт Расширенный FCB, если FFh
-06h 5 байт Зарезервировано
-Olh байт Атрибут файла, если расширенный FCB
+00h байт Номер диска (0 - текущий, 1 - А...)
+01h 8 байт Имя файла
+09h 3 байта Расширение файла
+OCh слово Номер текущего блока
+OEh слово Размер логической записи

+10h двойное слово Размер файла
+14h слово Дата последней записи
+16h слово Время последней записи

+18h 8 байт Зарезервировано
+20h байт Запись с текущего блока

+21h двойное слово Номер записи при непосредственном доступе к файлу

Выход:

AL=OOh, если функция выполнена успешно

AL=FFh, если файл не найден там, где он находился при открытии

с помощью функции OFh

Описание.

Закрывает файл, открытый функцией OFh. Файл должен находиться на

своем первоначальном месте в текущем оглавлении диска, на котором

он был открыт. Если файл найден, оглавление обновляется, файловые

буфера сбрасываются и возвращается AL=OOh. Если файл не найден,

оглавление не обновляется и возвращается AL=FFh.



DOS, функция 11h Найти первый совпадающий файл через FCB


Вход:

AH=llh

DS:DX - адрес неоткрытого FCB (Таблица Б-2)

Выход:

AL°OOh, если подходящее имя найдено

DTA заполнен

AL=FFh, если подходящего имени нет

Описание.

В текущем оглавлении DOS происходит поиск файлов с именем, соот-

ветствующим заданному шаблону. При неудаче возвращается

AL=OFFh. Если имя найдено, AL очищается, в первый байт DTA поме-

щается номер дисковода (А - 1, В - 2 и так далее), а в следующие

32 байта помещается элемент оглавления для найденного файла.

Можно использовать при вызове расширенный FCB, чтобы выбирать

файлы с указанными атрибутами. В этом случае в DTA помещаются:

байт FFh, 7 байт нулей, номер диска и элемент оглавления. ,



DOS, функция 12h Найти следующий совпадающий файл через FCB


Ввод:

АН-12h

DS:DX - адрес неоткрытого FCB (Таблица Б-2)

Выход:

AL=OOh, если подходящее имя найдено

DTA заполнен

AL=FFh, если подходящего имени нет

Описание.

Используется после вызова функции llh (Найти первый совпадающий

файл через FCB) с обобщенным именем файла. Каждый последующий

вызов заполняет DTA очередным подходящим элементом оглавления

и возвращает AL=OOh. Если подходящих имен больше нет, возвращает-

ся AL=FFh.

Резервируемая область в FCB сохраняет информацию, необходимую

для продолжения поиска. Поэтому не стоит открывать и изменять FCB

между вызовами.



DOS, функция 13h Удалить файл через FCB


Вход:

AH=13h

DS:DX - адрес неоткрытого FCB (Таблица Б-2)

Выход:

AL=OOh, если функция выполнена успешно

AL=FFh, если файл не найден или доступ к файлу не разрешен

Описание.

Эта функция удаляет все подходящие файлы в текущем оглавлении

указанного диска согласно спецификации в FCB. Если подходящие

файлы не найдены или если доступ отвергнут (как при попытке уда-

лить файл с атрибутом Read-Only), функция возвращает в регистре AL

значение FFh.



DOS, функция 14h Последовательное чтение из файла через FCB


Вход:

AH°14h

DS:DX - адрес открытого FCB (Таблица Б-2)

Выход:

AL=OOh, если чтение было успешным и DTA содержит данные

AL=01h, если достигнут конец файла (EOF) и данные не считаны

AL=02h, если произошел выход за сегмент (чтения не было)

AL=03h, если EOF и считана усеченная запись (дополнена нулями)

Описание.

Функция читает файл, специфицированный в FCB. Затем соответствен-

но увеличивает значения полей в FCB.

Перед началом последовательной обработки файла нужно сбрасывать

CurRec в ноль, так как функция OFh не инициализирует это поле.



DOS, функция 15h Последовательная запись в файл через FCB


Вход:

AH°15h

DS:DX - адрес открытого FCB (Таблица Б-2)

Выход:

AL=OOh, если запись была успешной

AL=01h, если ошибка переполнения диска (данные не записаны)

AL=02h, если произошел выход за сегмент (записи не было)

Описание.

Функция записывает файл, специфицированный в FCB. Затем соответ-

ственно увеличивает значения полей в FCB.

Перед началом последовательной обработки файла нужно сбрасывать

"Номер текщей записи" в ноль, так как функция OFh не инициализиру-

ет это поле.

Примечание.

DOS буферизует данные, записывая полный сектор за один раз.



DOS, функция 16h Создание файла через FCB


Вход:

АН-16h

DS:DX - адрес неоткрытого FCB (Таблица Б-2)

Выход:

AL=OOh, если функция выполнена успешно

FCB заполнен

AL=FFh, если при выполнении функции возникли ошибки

Описание.

Файл, специфицированный неоткрытым FCB, создается на диске, ука-

занном в FCB (0 - текущий, 1 - А и так далее). Он открывается в те-

кущем оглавлении этого диска. FCB заполняется аналогично функции

OFh. Если файл существует в момент вызова, его элемент оглавления

перекрывается новым файлом, а длина файла сбрасывается в ноль.

Примечание.

Handle-ориентированные функции DOS 2.0+ гораздо удобнее в работе.



DOS, функция 17h Переименовать файл через FCB


Вход:

AH-17h

DS:DX - адрес измененного FCB (Таблица Б-2)

Выход:

AL=OOh, если функция выполнена успешно

AL=FFh, если при выполнении функции возникли ошибки

Описание.

Переименовывает файл в текущем оглавлении.



DOS, функция 19h i Получить текущий диск DOS


Вход:

AH=19h

Выход:

AL - номер текущего диска (0 - А, 1 - В, и так далее)

Описание.

Возвращает номер дисковода текущего диска DOS.



DOS, функция 21h ^ Считать произвольную запись файла


Вход:

AH-21h

DS:DX - адрес открытого FCB (Таблица Б-2)

Выход:

AL=OOh, если чтение было успешным и DTA заполнена данными

AL°01h, если достигнут конец файла (EOF) и чтения не было

AL=02h, если произошел выход за сегмент (чтения нет)

AL°03h, если встречен EOF и усеченная запись дополнена нулями

Описание.

Данная функция читает из файла с текущей позиции как с указанной

в полях FCB "Запись с текущей позиции" и "Номер записи при непо-

средственном доступе к файлу".