ВУЗ:
Составители:
122
прерывания IRET. Адреса таблиц параметров можно передавать прежним
способом, а можно и через другие свободные векторы прерываний.
4.4 Защита от повторной загрузки
Для защиты от повторной загрузки резидентной программы в память
инициализирующая секция должна предпринять некоторые действия по
обнаружению собственной резидентной секции в памяти, а резидентная
секция должна соответствующим образом ответить на
эти действия. Для
осуществления этих действий можно использовать мультиплексное
прерывание DOS int 2Fh.
Функции C0h – FFh этого прерывания зарезервированы для
пользователя. В DOS принято, что прерывание 2Fh возвращает в регистре
AL следующие состояния резидентной программы:
0 – программа не установлена, но ее можно установить;
1 – программа не установлена, и ее нельзя установить;
FFh – программа установлена.
При ошибке должен быть установлен
флаг переноса CF, а в регистре
AX следует вернуть код ошибки. Для того чтобы резидентная секция
программы реагировала на прерывание 2Fh, в нее следует включить
обработчик соответствующих функций этого прерывания. Для нормальной
работы этого обработчика инициализирующая секция должна установить
новый вектор прерывания 2Fh, сохранив при этом старый вектор во
внутренней переменной. Новый обработчик прерывания
2Fh должен
выполнить все, что ему положено, а после этого вызвать старый
обработчик этого прерывания. В приведенном ниже примере резидентной
программы использован именно этот способ защиты от повторной
загрузки.
Другим способом защиты от повторной загрузки является
использование специального кода для индикации наличия резидентной
программы в памяти. Специальный идентифицирующий код помещается в
заранее определенное место в памяти или в заранее определенное место в
резидентной секции программы. Если код помещается в определенное
место в памяти (например, на месте вектора прерывания 60h), при
инициализации проверяется наличие этого кода в этом месте. Если код в
наличии, загрузка программы не производится.
Если идентифицирующий код (сигнатура) помещается в
определенном
месте резидентной секции, инициализирующая секция
проверяет наличие этого кода по адресу точки входа в резидентную
программу (она знает, как определить адрес точки входа) и по положению
этого кода относительно точки входа (это она тоже знает). Обнаружение
кода влечет за собой отказ от загрузки программы.
122
прерывания IRET. Адреса таблиц параметров можно передавать прежним
способом, а можно и через другие свободные векторы прерываний.
4.4 Защита от повторной загрузки
Для защиты от повторной загрузки резидентной программы в память
инициализирующая секция должна предпринять некоторые действия по
обнаружению собственной резидентной секции в памяти, а резидентная
секция должна соответствующим образом ответить на эти действия. Для
осуществления этих действий можно использовать мультиплексное
прерывание DOS int 2Fh.
Функции C0h – FFh этого прерывания зарезервированы для
пользователя. В DOS принято, что прерывание 2Fh возвращает в регистре
AL следующие состояния резидентной программы:
0 – программа не установлена, но ее можно установить;
1 – программа не установлена, и ее нельзя установить;
FFh – программа установлена.
При ошибке должен быть установлен флаг переноса CF, а в регистре
AX следует вернуть код ошибки. Для того чтобы резидентная секция
программы реагировала на прерывание 2Fh, в нее следует включить
обработчик соответствующих функций этого прерывания. Для нормальной
работы этого обработчика инициализирующая секция должна установить
новый вектор прерывания 2Fh, сохранив при этом старый вектор во
внутренней переменной. Новый обработчик прерывания 2Fh должен
выполнить все, что ему положено, а после этого вызвать старый
обработчик этого прерывания. В приведенном ниже примере резидентной
программы использован именно этот способ защиты от повторной
загрузки.
Другим способом защиты от повторной загрузки является
использование специального кода для индикации наличия резидентной
программы в памяти. Специальный идентифицирующий код помещается в
заранее определенное место в памяти или в заранее определенное место в
резидентной секции программы. Если код помещается в определенное
место в памяти (например, на месте вектора прерывания 60h), при
инициализации проверяется наличие этого кода в этом месте. Если код в
наличии, загрузка программы не производится.
Если идентифицирующий код (сигнатура) помещается в
определенном месте резидентной секции, инициализирующая секция
проверяет наличие этого кода по адресу точки входа в резидентную
программу (она знает, как определить адрес точки входа) и по положению
этого кода относительно точки входа (это она тоже знает). Обнаружение
кода влечет за собой отказ от загрузки программы.
Страницы
- « первая
- ‹ предыдущая
- …
- 120
- 121
- 122
- 123
- 124
- …
- следующая ›
- последняя »
