Электронная библиотека » Игорь Гульев » » онлайн чтение - страница 12


  • Текст добавлен: 14 ноября 2013, 04:35


Автор книги: Игорь Гульев


Жанр: Программирование, Компьютеры


сообщить о неприемлемом содержимом

Текущая страница: 12 (всего у книги 15 страниц)

Шрифт:
- 100% +
Защита от SPAM

Для многих пользователей Интернет SPAM (бесконечные рекламные предложения и мусор, рассылаемый по почте) стал настоящим бедствием. Основные рекомендации для защиты от SPAM следующие:

– пишите письма в конференции Usenet исключительно с ненужных (бесплатных) адресов, потому что именно письма в конференции Usenet являются основной «засветкой» для спамеров. А если будет много SPAM, то такой адрес можно, что называется, выбросить и за пару минут сделать другой подобный;

– установите какую-либо программу-фильтр для e-mail. Существует великое множество таких программ, доступных на бесплатных серверах, например, на http://www.shareware.com и http://www.download.com.

На FTP-сервер под чужим IP-адресом

Путешествуя по Интернет, пользователи часто не задумываются о том, что оставляют следы своих посещений каждый раз, когда заходят на какой-либо FTP-сайт. Стандартные log-файлы позволяют любопытным владельцам сайтов узнать многое, и, прежде всего, IP-адрес, что равнозначно, например, тому, что определен номер телефона. Существует несколько способов защитить privacy от подобных посягательств.

Анонимно путешествовать по сети можно с помощью proxy-сервера. Proxy сервер работает, по сути, как Анонимайзер, то есть документ с сайта «забирает» он, а не компьютер пользователя. Большинство proxy серверов ограничивают доступ на основании IP-адреса, с которого приходит обращение. Иными словами, если провайдером пользователя является Demos, то proxy сервер Glasnet его к себе попросту не пустит. Но, к счастью, в сети всегда можно найти «добрый» proxy, владельцы которого либо открыто заявляют о его доступности для всех желающих, либо, по той или иной причине, не ограничивают доступ только своим доменом, о чем широкой публике не известно, например:


svc.logan.k12.ut.us: 8001

proxy1.emirates.net.ae: 8080

proxy.sysnet.it: 8080

www.archmate.com.tw: 3128

www−proxy.global−one.ru: 3333

sunsite.cs.msu.su: 3128

www.anonymizer.com: 8080

squid.nlanr.net: 3128


Для настройки FTP-клиентов proxy-сервер надо установить в passive режим. Проделав эту нехитрую операцию, можно путешествовать по сети, как болгарский или американский пользователь, но… тут есть один очень важный момент. Далеко не все proxy серверы являются полностью анонимными. Некоторые из них позволяют администратору сайта, который пользователь посещаете с использованием proxy, при желании определить IP-адрес, с которого происходит обращение к proxy, то есть реальный IP-адрес пользователя. Поэтому выбранный proxy-сервер нужно проверить на предмет его полной или неполной анонимности. Сделать это можно на сервере http://www.tamos.com/bin/proxy.cgi

Если в ответ получено сообщение «Proxy server is detected!», выбранный proxy имеет «дыру», будет предоставлена информация о реальном IP-адресе пользователя, как, впрочем, и об IP-адресе proxy сервера, с которого пришел запрос. Если же сообщение гласит «Proxy server is not detected» – все в порядке, анонимность обеспечена. Рекомендуется периодически (не реже, чем раз в месяц) проверять proxy, с которыми ведется работа, на предмет анонимности. В заключение еще несколько соображений касательно использования proxy серверов. Работа через далеко расположенный proxy снижает скорость передачи данных и увеличивает время ожидания. Кроме того, если все читатели будут использовать приведенные выше адреса proxy, то очень скоро удовольствие кончится, и доступ к ним будет закрыт (если уже не закрыт). Найти подходящий proxy несложно, например, приведенные адреса найдены всего за пять минут. В поисковой машине (например AltaVista) указываются ключевые слова, что-нибудь вроде proxy+server+configuration+ Netscape. В результате появится список страниц, где провайдеры рассказывают своим пользователям, как настроить браузеры для работы с их proxy. Если пробовать все подряд, на пятый или седьмой раз удача улыбнется, и proxy-сервер согласится работать.

Приложения

В приложениях приведена информация, которая может быть полезна программистам не только при написании вирусов, но и при создании других программ. Описано более 100 различных функций DOS, AMIBIOS и DPMI (в том числе недокументированные).

Приложение А
Форматы заголовков EXE-файлов
Формат заголовка обычного EXE-файла

В начале EXE-файла расположена форматированная часть заголовка EXE-файла (Таблица А-1).

Далее следует таблица настройки адресов (Relocation Table), состоящая из длинных указателей (смещение: сегмент) на те слова в загрузочном модуле, которые содержат настраиваемые сегментные адреса. Примечание: элементы таблицы настройки могут быть расположены не по порядку.

Таблица А-1. Формат заголовка обычного EXE-файла
Формат заголовка NE-executable EXE-файла

В состав старого заголовка входят:

– обычный EXE-заголовок (Таблица A-2);

– зарезервированная часть;

– указатель на новый заголовок (если в ЕХЕ-заголовке в начале таблицы перемещаемых элементов – по смещению18h – стоит 40h или больше, то слово, расположенное по смещению 3С^ содержит смещение начала нового заголовка);

– DOS-программа (STUB).

Таблица A-2. Формат обычного EXE-заголовка в NE-executable EXE-файле

В состав нового заголовка входят:

– инфоблок (Таблица A-3);

– таблица сегментов (Таблица A-4);

– таблица ресурсов (Таблица A-5);

Таблица A-3. Формат NE-заголовка



Таблица A-4. Формат таблицы сегментов

Таблица A-5. Формат таблицы ресурсов

– таблица резидентных имен;

– таблица ссылок на модули;

– таблица импортируемых имен;

– таблица входов (Таблицы A-6 и A-7);

– таблица нерезидентных имен.

В заголовке нового стиля содержится вся информация, необходимая для сегментированного исполняемого файла – заголовки таблицы сегментов, ресурсов и имен.

Сразу за заголовком находится таблица сегментов. В ней содержится описание каждого сегмента исполняемого файла.

Таблица ресурсов. Ресурсами являются все основные объекты интерфейса – диалоговые окна, меню, курсоры, растровые изображения, значки и так далее.

Формат таблицы ресурсов (смещения относительно начала входа каждого ресурса). Значения в диапазоне смещений 02-12h повторяются в таблице до тех пор, пока величина по смещению 02h не станет равной нулю. Значения в диапазоне от 0Ah до 12h повторяются столько раз, сколько указано по адресу 04h.

Таблица A-6. Таблица входов перемещаемого сегмента

Таблица A-7. Таблица входов фиксированного сегмента

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

Данные в таблице находятся в виде:

– длина строки (равна нулю, если в таблице нет дополнительных строк);

– строка резидентного имени (первая строка – имя модуля);

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

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

Таблица импортируемых имен. В ней записаны имена модулей, импортируемых в исполняемый файл. Каждый вход состоит из двух частей – байта длины строки и собственно строки.

Таблица входов. В ней содержатся группы точек входа в исполняемый файл.

Эти группы создаются редактором связей и последовательно пронумерованы (начиная с 1). Каждая группа начинается с двухбайтного заголовка, который содержит число входов в группе (00h – конец таблицы) и дополнительную информацию о сегменте (FFh – перемещаемый, FEh – вход относится к константе, определенной внутри модуля, иначе вход является индексом сегмента). Для перемещаемых сегментов каждый вход состоит из шести байт, а для фиксированных – из трех.

Таблица нерезидентных имен. Содержит имена экспортируемых функций, содержащихся в исполняемом файле. Эти имена не всегда остаются резидентными в памяти. Структура полностью совпадает со структурой таблицы резидентных имен.

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

Таблица содержит:

– тип адресации (только сегмент, только смещение, или и то, и другое);

– тип перемещения (внутренняя ссылка, импортируемый порядковый номер, импортируемое имя);

– номер сегмента или порядковый ID (для внутренних ссылок);

– индекс таблицы ссылок или порядковый номер функции;

– индекс таблицы ссылок или смещение таблицы имен (для импортируемых имен).

Формат заголовка PE-executable EXE-файла

В состав старого заголовка входят:

– обычный EXE-заголовок (Таблица A-8);

– зарезервированная часть;

– указатель на PE-заголовок (если в ЕХЕ-заголовке в начале таблицы перемещаемых элементов – по смещению 18h – стоит 40h или больше, то слово, расположенное по смещению 3С^ содержит смещение начала PE-заголовка);

– DOS-программа (STUB).

В состав нового заголовка входят:

– PE-заголовок (Таблица A-9);

– таблица объектов (Таблица A-10);

– таблицы ресурсов, импортируемых и экспортируемых имен, настройки адресов.


Таблица A-8. Формат обычного EXE-заголовка в PE-executable EXE-файле

Таблица A-9. Формат PE-заголовка



Таблица A-10. Формат таблицы объектов
Приложение Б
Функции DOS (INT 21h)
DOS, функция 00h
Завершить программу

Вход:

AH=00h

CS – сегмент PSP завершающегося процесса


Описание.

Передает управление на вектор завершения в PSP (выходит в родительский процесс). Идентична функции INT 20h (Terminate). Регистр CS должен указывать на PSP. Восстанавливает векторы прерываний DOS 22h-24h (Завершение, Ctrl-Break и Критическая ошибка), устанавливая значения, сохраненные в родительском PSP. Выполняет сброс файловых буферов. Файлы должны быть предварительно закрыты, если их длина изменилась.


Примечание.

Данная функция не рекомендуется к использованию. Для выхода из программы лучше использовать функцию DOS 4Ch.

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

Вход:

AH=01h


Выход:

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


Описание.

Считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо). При обнаружении Ctrl-Break выполняется INT 23h.


Примечание.

Ввод расширенных клавиш ASCII (F1-F12, PgUp, курсор и другие) требует двух обращений к этой функции. Первый вызов возвращает AL=0. Второй вызов возвращает в AL расширенный код ASCII.

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

Вход:

AH=02h

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


Описание.

Посылает символ из DL в стандартное устройство вывода. Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. При обнаружении Ctrl-Break выполняется INT 23h.

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

Вход:

AH=03h


Выход:

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


Описание.

Считывает (ожидает) символ со стандартного вспомогательного устройства, COM1 или AUX и возвращает этот символ в AL.


Примечание.

Ввод не буферизуется и должен опрашиваться (не управляется прерываниями). При запуске DOS порт AUX (COM1) инициализируется так: 2400 бод, без проверки на четность, 1 стоп-бит, 8-битные слова. Команда DOS MODE используется для установки иных характеристик.

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

Вход:

AH=04h

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


Описание.

Посылает символ, находящийся в регистре DL, на стандартное вспомогательное устройство, COM1 или AUX.

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

Вход:

AH=05h

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


Описание.

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

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

Вход:

AH=06h

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

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


Выход:

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

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

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


Описание.

При DL=0FFh выполняет ввод с консоли «Без ожидания», возвращая включенный флаг нуля ZF, если на консоли нет готового символа. Если символ готов, сбрасывает флаг ZF и возвращает считанный символ в AL. Если DL не равен 0FFh, то DL направляется на стандартный вывод.

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

Вход:

AH=07h


Выход:

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


Описание.

Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. Не проверяет на Ctrl-Break, BackSpace и другие.


Примечание.

Для ввода расширенного символа ASCII должна быть вызвана дважды. Для проверки статуса используется функция DOS 0Bh (чтобы не ожидать нажатия клавиши).

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

Вход:

AH=08h


Выход:

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


Описание.

Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. При обнаружении Ctrl-Break выполняется прерывание INT 23h.


Примечание.

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

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

Вход:

AH=09h

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


Описание.

Строка, исключая завершающий ее символ «$», посылается на стандартный вывод. Символы Backspace обрабатываются как в функции 02h (вывод на дисплей). Чтобы перейти на новую строку, обычно включают в текст пару CR/LF (ASCII 0Dh и ASCII 0Ah). Строки, содержащие «$», можно передать на стандартное устройство вывода с помощью функции 40h (BX=0).

DOS, функция 0Ah
Ввод строки в буфер

Вход:

AH=0Ah

DS:DX – адрес входного буфера (Таблица Б-1)

Таблица Б-1. Формат входного буфера

Выход:

Буфер содержит введенные данные, в конце – символ CR (ASCII 0Dh)

DOS, функция 0Bh
Проверка статуса ввода

Вход:

AH=0Bh


Выход:

AL=FFh, если символ доступен со стандартного ввода AL=00h, если нет доступного символа


Описание.

Проверяет состояние стандартного ввода. При распознавании Ctrl-Break выполняется INT 23h.


Примечания.

Используется перед функциями 01h, 07h и 08h, чтобы избежать ожидания нажатия клавиши.

Эта функция дает простой неразрушающий способ проверки Ctrl-Break в процессе длинных вычислений или другой обработки, обычно не требующей ввода. Это позволяет снимать счет по нажатию Ctrl-Break.

DOS, функция 0Ch
Ввод с очисткой

Вход:

AH=0Ch

AL – номер функции ввода DOS:

AL=01h – ввод с клавиатуры

AL=06h – ввод с консоли

AL=07h – нефильтрующий без эха

AL=08h – ввод без эха

AL=0Ah – буферизованный ввод


Описание.

Очищает буфер опережающего ввода стандартного ввода, а затем вызывает функцию ввода, указанную в AL. Это заставляет систему ожидать ввод очередного символа.

DOS, функция 0Dh
Сброс диска

Вход:

AH=0Dh


Описание.

Сбрасывает диск (записывает на диск все файловые буферы). Файл, размер которого изменился, должен быть предварительно закрыт (при помощи функций 10h или 3Eh).

DOS, функция 0Eh
Установить текущий диск DOS

Вход:

AH=0Eh

DL – номер диска (0 – A, 1 – B и так далее), который становится текущим


Выход:

AL – общее число дисководов в системе


Описание.

Диск, указанный в DL, становится текущим. Проверка: используется функция 19h (дать текущий диск). В регистре AL возвращается число дисководов всех типов, включая жесткие диски и «логические» диски (как диск B: системе с одним гибким диском).


Примечание.

AL имеет то же значение, что и LASTDRIVE, указанное в файле CONFIG.SYS, и по умолчанию равно 5.

DOS, функция 0Fh
Открыть файл через FCB

Вход:

AH=0Fh

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

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

Выход:

AL=00h, если функция выполнена успешно (FCB заполнен)

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


Описание.

Файл, описываемый неоткрытым FCB, должен существовать в текущем оглавлении на диске, специфицированном в FCB (0 – текущий, 1 – A, 2 – B и так далее). Если файл не существует, возвращается AL=0FFh. Файл открывается в режиме совместимости. Если поле «Номер диска» в FCB равно нулю в момент вызова, то оно заполняется номером текущего дисковода (1 – A, 2 – B и так далее). Поле FCB «Номер текущего блока» устанавливается в ноль. Поле FCB «Размер логической записи» устанавливается в 80h. Поля даты и размера файла в FCB устанавливаются из оглавления.

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

Вход: AH=10h

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


Выход:

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

AL=FFh, если файл не найден там, где он находился при открытии с помощью функции 0Fh


Описание.

Закрывает файл, открытый функцией 0Fh. Файл должен находиться на своем первоначальном месте в текущем оглавлении диска, на котором он был открыт. Если файл найден, оглавление обновляется, файловые буфера сбрасываются и возвращается AL=00h. Если файл не найден, оглавление не обновляется и возвращается AL=FFh.

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

Вход:

AH=11h

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


Выход:

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

DTA заполнен

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


Описание.

В текущем оглавлении DOS происходит поиск файлов с именем, соответствующим заданному шаблону. При неудаче возвращается AL=0FFh. Если имя найдено, AL очищается, в первый байт DTA помещается номер дисковода (A – 1, B – 2 и так далее), а в следующие 32 байта помещается элемент оглавления для найденного файла.

Можно использовать при вызове расширенный FCB, чтобы выбирать файлы с указанными атрибутами. В этом случае в DTA помещаются: байт FFh, 7 байт нулей, номер диска и элемент оглавления.

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

Ввод:

AH=12h

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


Выход:

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

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


Описание.

Используется после вызова функции 11h (Найти первый совпадающий файл через FCB) с обобщенным именем файла. Каждый последующий вызов заполняет DTA очередным подходящим элементом оглавления и возвращает AL=00h. Если подходящих имен больше нет, возвращается AL=FFh.

Резервируемая область в FCB сохраняет информацию, необходимую для продолжения поиска. Поэтому не стоит открывать и изменять FCB между вызовами.

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

Вход:

AH=13h

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


Выход:

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

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


Описание.

Эта функция удаляет все подходящие файлы в текущем оглавлении указанного диска согласно спецификации в FCB. Если подходящие файлы не найдены или если доступ отвергнут (как при попытке удалить файл с атрибутом Read-Only), функция возвращает в регистре AL значение FFh.

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

Вход:

AH=14h

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


Выход:

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

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

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

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


Описание.

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

Перед началом последовательной обработки файла нужно сбрасывать CurRec в ноль, так как функция 0Fh не инициализирует это поле.

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

Вход: AH=15h

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


Выход:

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

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

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


Описание.

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

Перед началом последовательной обработки файла нужно сбрасывать «Номер текщей записи» в ноль, так как функция 0Fh не инициализирует это поле.


Примечание.

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

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

Вход:

AH=16h

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


Выход:

AL=00h, если функция выполнена успешно FCB заполнен

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


Описание.

Файл, специфицированный неоткрытым FCB, создается на диске, указанном в FCB (0 – текущий, 1 – A и так далее). Он открывается в текущем оглавлении этого диска. FCB заполняется аналогично функции 0Fh. Если файл существует в момент вызова, его элемент оглавления перекрывается новым файлом, а длина файла сбрасывается в ноль.


Примечание.

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

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

Вход:

AH=17h

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


Выход:

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

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


Описание.

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

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

Вход:

AH=19h


Выход:

AL – номер текущего диска (0 – A, 1 – B, и так далее)


Описание.

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

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

Вход:

AH=1Ah

DS:DX – адрес DTA


Описание.

Устанавливает адрес DTA. Все FCB-ориентированные операции работают с DTA. DOS не позволяет операциям ввода/вывода пересекать границу сегмента. Функции поиска 11h, 12h, 4Eh и 4Fh помещают данные в DTA. DTA глобальна, поэтому надо проявлять осторожность при назначении ее в рекурсивной процедуре. При запуске программы ее DTA устанавливается по смещению 80h относительно PSP.

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

Вход:

AH=1Bh


Выход:

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

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

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

CX – байт на сектор

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

Описание.

Возвращает информацию о размере и типе текущего диска. Размер диска (в байтах) равен DX*AL*CX. Свободную память можно найти функциями 36h или 32h.


Версии:

DOS 1.x держит FAT в памяти и возвращает DS:BX => FAT. DOS 2.0+ может держать в памяти лишь часть всей FAT.


Примечание.

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

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

Вход:

AH=1Ch

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


Выход:

DS:BX – адрес байта FAT ID, отражающего тип диска (приведен в описании функции 1Bh)

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

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

CX – байт на сектор


Описание.

Аналогична функции 1Bh с той разницей, что регистр DL указывает диск, для которого нужно получить информацию.

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

Вход:

AH=21h

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


Выход:

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

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

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

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


Описание.

Данная функция читает из файла с текущей позиции как с указанной в полях FCB «Запись с текущей позиции» и «Номер записи при непосредственном доступе к файлу».

DOS, функция 22h
Писать произвольную запись файла

Вход:

AH=22h

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


Выход:

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

AL=01h, при переполнении диска

AL=02h, если DTA+FCB выходит за сегмент (нет записи)


Описание.

Данная функция записывает в файл с текущей позиции как с указанной в полях FCB «Запись с текущей позиции» и «Номер записи при непосредственном доступе к файлу».

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

Вход:

AH=23h

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


Выход:

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

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


Описание.

Проще определить размер файла при помощи функции 3Dh с последующим выполнением 42h (при AL=2).

DOS, функция 24h
Установить адрес произвольной записи в файле

Вход:

AH=24h

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


Описание.

Устанавливает поле «Номер записи при непосредственном доступе к файлу» в FCB на файловый адрес, соответствующий значениям полей «Текущий блок» и «Запись с текущей позиции».

DOS, функция 25h
Установить вектор прерывания

Вход:

AH=25h

AL – номер прерывания

DS:DX – вектор прерывания – адрес программы обработки прерывания


Описание.

Устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL, равным DS:DX. Это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS знает, что происходит, и гарантирует, что в момент записи прерывания будут заблокированы.


Примечание.

Восстановить DS (если необходимо) после этого вызова.

DOS, функция 26h
Создать новый PSP

Вход:

AH=26h

DX – адрес сегмента (параграфа) для нового PSP

CS – сегмент PSP, используемый как шаблон для нового PSP (Таблица Б-4)


Описание.

Устанавливает PSP для порождаемого процесса по адресу DX:0000. Текущий PSP (100h байт, начиная с CS:0) копируется в DX:0000h, поле MemTop соответственно корректируется, векторы Terminate, Ctrl-Break и Critical Error копируются в PSP из векторов прерываний INT 22h, INT 23h и INT 24h. После этого можно загрузить программу с диска и передать ей управление посредством FAR JMP.


Примечание.

Если перехватывается INT 21h, нужно позаботиться о помещении в стек корректного CS: IP. Еще лучше использовать функцию 4Ch.

Таблица Б-4. Формат PSP
DOS, функция 27h
Читать произвольный блок файла

Вход: AH=27h

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

CX – число считываемых записей


Выход:

AL=00h, если чтение успешно и DTA заполнена данными AL=01h если достигнут конец файла (EOF) и данные не считаны AL=02h, если при чтении произошел выход за границу сегмента AL=03h, если EOF и считана усеченная порция (дополнена нулями) CX – действительное число считанных записей


Описание.

Читает несколько записей из файла, начиная с файлового адреса, указанного полем «Номер записи при непосредственном доступе к файлу» в FCB. Помещает данные в память, начиная с адреса DTA. Соответствующие поля FCB корректируются, чтобы указывать на следующую запись (первую за прочитанными).

DOS, функция 28h
Писать произвольный блок файла

Вход:

AH=28h

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

CX – число записываемых блоков (если CX равен нулю, то размер файла усекается до указанного в поле FCB «Номер записи при непосредственном доступе к файлу»)


Выход:

AL=00h, если запись успешна

AL=01h, при переполнении диска

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

CX – действительное число сделанных записей


Описание.

Записывает несколько блоков в файл, начиная с файлового адреса, указанного полем «Номер записи при непосредственном доступе к файлу» в FCB. Читает данные из памяти, начиная с адреса DTA. Соответствующие поля FCB корректируются, чтобы указывать на следующую запись (первую за прочитанными).


DOS, функция 29h
Разобрать имя файла

Вход:

AH=29h

DS:SI – адрес исходной текстовой строки для разбора

ES:DI – адрес буфера для результирующего неоткрытого FCB (Таблица Б-2)

AL – битовые флаги, указывающие опции разбора (Таблица Б-5).


Выход:

AL=00h, если результирующий FCB не содержит обобщенных символов

AL=01h, если результирующий FCB содержит обобщенные символы

AL=FFh, если неверно обозначение диска в имени файла

DS:SI – изменен – указывает на символ сразу вслед за именем файла

ES:DI – не изменен – указывает на неоткрытый FCB


Описание.

Создает неоткрытый FCB из строки текста или параметра команды. Текст, начиная с DS:SI, анализируется как имя файла в формате D: FILENAME.EXT, и буфер по адресу ES:DI заполняется как соответственно форматированный FCB.

Таблица Б-5. Битовые флаги
DOS, функция 2Ah
Получить системную дату

Вход:

AH=2Ah


Выход:

AL – день недели (0 – воскресенье, 1 – понедельник, … 6 – суббота), DOS 3.0+

CX – год (от 1980 до 2099)

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

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


Описание.

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


Версии.

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

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

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

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

Вход:

AH=2Bh

CX – год (от 1980 до 2099)

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

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


Выход:

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

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


Описание.

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

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

Вход:

AH=2Ch


Выход:

CH – часы (от 0 до 23)

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

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

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


Описание.

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


Примечание.

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

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

Вход:

AH=2Dh

CH – часы (от 0 до 23)

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

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

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


Выход:

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

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


Описание.

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

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

Вход:

AH=2Eh

AL=00h – отключить верификацию

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


Описание.

Задает, должна ли DOS верифицировать (считывать обратно) каждый сектор, записываемый на диск. Это замедляет операции записи на диск, но гарантирует максимальную надежность записи.


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

Вход:

AH=2Fh


Выход:

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


Описание.

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


Примечание.

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


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

DOS, функция 30h
Получить номер версии DOS

Вход:

AH=30h


Выход:

AL – старший номер версии

AH – младший номер версии

BL:CX – 24-битный серийный номер (большинство версий не поддерживают этот параметр)


Описание.

Возвращает в AX значение текущего номера версии DOS. Например, для DOS 3.20 в AL возвращается 03h, в AH – 14h.


Примечание.

Если в AL возвращается 00h, можно предполагать, что работает DOS более ранней версии, чем DOS 2.0.


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

DOS, функция 31h
Завершиться и остаться резидентным

Вход:

AH=31h

AL – код выхода

DX – объем памяти, оставляемой резидентной (в параграфах)


Описание.

Выходит в родительский процесс, сохраняя код выхода в AL. Код выхода можно получить через функцию 4Dh. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт равно DX*16). Эта функция перекрывает функцию INT 27h, которая не возвращает код выхода и не способна установить резидентную программу, размер которой превышает 64 Кбайт.


Страницы книги >> Предыдущая | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Следующая
  • 0 Оценок: 0

Правообладателям!

Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.


Популярные книги за неделю


Рекомендации