Создаем вирус и антивирус
Шрифт:
Выход:
CF=0 (эта функция всегда выполняется успешно)
AX – значение приращения до следующего селектораОписание.
Возвращает приращение для вычисления следующего селектора в тех функциях, которые могут возвращать более одного селектора.
DPMI, функция 0006h Получить базовый адрес сегмента по селекторуВход:
AX=0006h
BX – селекторВыход:
CF=0, если функция выполнена успешно
CX:DX – 32-разрядный линейный базовый адрес указанного сегмента
CF=1,Описание.
Возвращает 32-разрядный базовый адрес сегмента по его селектору.
DPMI, функция 0007h Установить базовый адрес сегментаВход:
AX=0007h
BX – селектор сегмента, для которого нужно установить базовый адрес
CX:DX – 32-разрядный линейный базовый адресВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибкиОписание. Устанавливает 32-разрядный линейный базовый адрес указанного сегмента.
Примечания.
С помощью этой функции можно изменить базовый адрес только тех сегментов, которые выделены функцией 0000h. Старшие 8 бит (регистр CH) базового адреса игнорируются в 16-разрядных версиях DPMI.
DPMI, функция 0008h Установить предел сегментаВход:
AX=0008h
BX – селектор сегмента, для которого надо установить предел
CX:DX – 32-разрядный предел сегментаВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибкиОписание. Устанавливает 32-разрядный предел указанного сегмента.
Примечания.
С помощью этой функции можно изменить только предел сегментов, выделенных функцией 0000h. В 16-разрядных версиях DPMI предел должен быть не более FFFFh. Если предел более 1Mбайт, то базовый адрес сегмента должен быть выровнен по границе страницы (1000h), а также младшие 12 бит предела должны быть равны нулю.
DPMI, функция 0009h Установить права доступа в дескриптореВход:
AX=0009h
BX – селектор сегмента, для которого надо установить права доступа
CL – значение поля прав доступа
CH – расширенное значение поля прав доступа для i80386 и выше (только в 32-разрядных DPMI)Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибкиОписание. Устанавливает поле прав доступа в дескрипторе.
Примечания.
С помощью этой функции можно изменить только предел сегментов, выделенных функцией 0000h.
DPMI, функция 000Ah Создать алиасный дескриптор для сегмента кодаВход:
AX=000Ah
BX – селектор сегмента кода, для которого надо создать алиасный дескриптор.Выход:
CF=0, если функция выполнена успешно
AX – новый селектор данных
CF=1, если при выполнении функции возникли ошибкиОписание. Создает дескриптор данных с таким
Примечания.
Созданный этой функцией алиасный дескриптор можно удалить функцией 0001h.
DPMI, функция 000Bh Получить дескрипторВход:
AX=000Bh
BX – селектор
ES:(E)DI – указатель на 8-байтный буфер, в который нужно скопировать дескриптор.Выход:
CF=0, если функция выполнена успешно
ES:(E)DI – указатель на 8-байтный буфер, содержащий дескриптор
CF=1, если при выполнении функции возникли ошибкиОписание. Данная функция копирует элемент таблицы дескрипторов LDT, соответствующий указанному селектору, в 8-байтный буфер.
Примечания.
32-битные программы должны использовать ES:EDI для адресации буфера, 16-битные – ES:DI.
DPMI, функция 000Ch Установить дескрипторВход:
AX=000Ch
BX – селектор
ES:(E)DI – указатель на 8-байтный буфер, содержащий дескрипторВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибкиОписание. Данная функция заносит содержимое 8-байтного буфера в элемент таблицы дескрипторов LDT, соответствующий указанному селектору.
Примечания.
32-битные программы должны использовать ES:EDI для адресации буфера, 16-битные – ES:DI. С помощью этой функции можно изменить только те дескрипторы, которые выделены функцией 0000h.
DPMI, функция 000Dh Выделить дескрипторВход:
AX=000Dh
BX – селекторВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибкиОписание. Данная функция выделяет дескриптор, соответствующий указанному селектору.
Примечания.
Созданный этой функцией дескриптор можно удалить функцией 0001h.
DPMI, функция 0100h Выделить блок памяти DOSВход:
AX=0100h
BX – количество параграфов (по 16 байт)Выход:
CF=0, если функция выполнена успешно
AX – сегментный адрес выделенного блока памяти
DX – селектор выделенного блока памяти
CF=1, если при выполнении функции возникли ошибки
AX – код ошибки DOS
BX – размер наибольшего доступного блока (в параграфах)Описание. Данная функция выделяет память из пула свободной памяти DOS.
Примечания.
Созданный этой функцией дескриптор не может быть изменен или освобожден. В случае, если запрашивается памяти больше, чем 64 Кбайт, функция выделяет несколько дескрипторов. Для доступа к следующему можно пользоваться функцией 0003h.
DPMI, функция 0101h Освободить блок памяти DOSВход:
AX=0101h
DX – селектор выделенного блока памяти