Создаем вирус и антивирус
Шрифт:
Выход:
CF=0, если функция выполнена успешно
ES:(E)DI – селектор: смещение модифицированной структуры вызова реального режима
CF=1, если при выполнении функции возникли ошибкиОписание. Данная функция вызывает процедуру реального режима, заканчивающуюся командой IRET.
Примечания.
Адрес процедуры должен быть указан в структуре вызова реального режима. Процедура должна завершать выполнение командой IRET. Если поля SS и SP равны нулю, то стек выделяется DPMI. 32-битные программы должны использовать ES:EDI для адресации структуры.
DPMI,Вход:
AX=0400hВыход:
CF=0
AH – версия DPMI
AL – подверсия DPMI
BX – флаги:
Бит 0=1, если программа запущена под управлением DPMI для 80386
Бит 1=1, если процессор вернулся в реальный режим для обработки прерываний
Бит 2=1, если поддерживается виртуальная память
Бит 3 – зарезервирован и не определяется
Остальные биты зарезервированы для использования в будущем и должны быть равны нулю.
CL – тип процессора:
CL=2 – 80286
CL=3 – 80386
CL=4 – 80486
DL – текущее значение базы первого контроллера прерываний
DH – текущее значение базы второго контроллера прерыванийОписание.
Данная функция возвращает версию DPMI.
DPMI, функция 0500h Получить информацию о свободной памятиВход:
AX=0500h
ES:(E)DI – селектор: смещение 30-байтного буфераВыход:
CF=0, если функция выполнена успешно
ES:(E)DI – селектор: смещение, содержащий структуру (Таблица Г-2).
CF=1, если при выполнении функции возникли ошибкиОписание. Данная функция возвращает информацию о свободной памяти.
Примечания.
32-битные программы должны использовать ES:EDI для адресации буфера. Только первое поле структуры гарантированно содержит правильное значение, остальные поля, в случае, если они не поддерживаются, содержат 0FFFFFFFFh (-1).
Таблица Г-2. Формат структуры информации о свободной памятиВход:
AX=0501h
BX:CX – размер блока свободной памяти, который нужно выделить (в байтах)Выход:
CF=0, если функция выполнена успешно
BX:CX – линейный адрес выделенного блока памяти
SI:DI – индекс блока памяти (используется для изменения размера и освобождения памяти)
CF=1, если при выполнении функции возникли ошибкиОписание. Данная функция выделяет блок памяти.
Примечания.
Данная функция не выделяет никаких дескрипторов.
DPMI, функция 0502h Освободить блок памятиВход:
AX=0502h
SI:DI – индекс блока памятиВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибкиОписание.
Примечания.
Программа должна освободить все дескрипторы, которые были выделены для адресации этого блока памяти.
DPMI, функция 0503h Изменить размер блока памятиВход:
AX=0503h
BX:CX – нужный размер блока памяти (в байтах)
SI:DI – индекс блока памятиВыход:
CF=0, если функция выполнена успешно
BX:CX – новый линейный адрес выделенного блока памяти
SI:DI – новый индекс блока памяти (используется для изменения размера и освобождения памяти)
CF=1, если при выполнении функции возникли ошибкиОписание. Данная функция изменяет размер блока памяти, выделенного функцией 0501h.
Примечания.
Данная функция может изменить линейный адрес и индекс блока памяти. Программа должна изменить все дескрипторы, которые были выделены для адресации этого блока памяти, а также для дальнейшей работы с блоком использовать новый индекс. Эта функция выдаст ошибку, если размер блока памяти будет нулевым.
DPMI, функция 0900h Получить состояние и запретить виртуальные прерыванияВход:
AX=0900hВыход:
CF=0
Виртуальные прерывания запрещены
AL=0 – виртуальные прерывания были запрещены
AL=1 – виртуальные прерывания были разрешеныОписание. Данная функция возвращает текущее состояние виртуальных прерываний, а затем запрещает виртуальные прерывания.
Примечания.
Регистр AH не будет изменен этой функцией. Для возвращения виртуальных прерываний в прежнее состояние нужно выполнить INT 31h.
DPMI, функция 0901h Получить состояние и разрешить виртуальные прерыванияВход:
AX=0901hВыход:
CF=0
Виртуальные прерывания разрешены
AL=0 – виртуальные прерывания были запрещены
AL=1 – виртуальные прерывания были разрешеныОписание. Данная функция возвращает текущее состояние виртуальных прерываний, а затем разрешает виртуальные прерывания.
Примечания. Регистр AH не будет изменен этой функцией. Для возвращения виртуальных прерываний в прежнее состояние нужно выполнить INT 31h.
DPMI, функция 0902h Получить состояние виртуальных прерываний
Вход:
AX=0902hВыход:
CF=0
AL=0 – виртуальные прерывания были запрещены
AL=1 – виртуальные прерывания были разрешеныОписание. Данная функция возвращает текущее состояние виртуальных прерываний.
Приложение Д Коды ошибок DOS
2 – файл не найден
3 – путь доступа не найден
5 – доступ отвергнут
6 – недопустимая обработка
8 – недостаточно памяти
10 – недопустимая программная среда
11 – неверный формат
18 – файлы отсутствуют