Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Защита резидентной программы от повторной загрузки.
Если в резидентной программе нет защиты от повторной загрузки, то при повторном её запуске станет резидентной её вторая копия. И т.д. этот процесс может продолжаться до тех пор, пока не будет исчерпана оперативная память. Если резидентная программа в процессе своей работы передает управление старому обработчику прерывания, то при инициализации n-ой копии будет вызываться n-1 и первая копия. Если в программе имеются счетчики или команды типа inc, dec, add, работающие с памятью то несколько команд одной и той же резидентной программы будут работать неверно. Поэтому обязательным элементом любой резидентной программы является процедура защиты её от повторной загрузки. Наиболее распространенным методом защиты резидентной программы от её повторной установки является использование мультиплексного прерывания 2fh, специально предназначенного для взаимодействия с резидентными программами.
Прерывание 2fh - мультиплексное прерывание Вызов:
ah = номер мультиплексного процесса (идентифицирует обработчик прерывания) 00h-7fh Резерв DOS 80h-b7h доступны b8h-8fh резерв для сетей c0h-ffh доступны для прикладных программ
В частности номера 00 и 01 закреплены за резидентной программой DOS print.com 02h-рез. порция assign 10h-рез порция share
al-номер функции al=00h - дать статус установки процесса
Возвращает al - статус установки 00h - не установлен - можно устанавливать 01h - не установлен - нельзя устанавливать ffh - установлен
Для того, чтобы резидентная программа могла отозваться на int 2fh, в ней должен иметься обработчик этого прерывания. Через этот обработчик может быть осуществлена не только проверка на повторную инициализацию, но и вообще связь с резидентной программой - смена режима её работы или получения от нее каких-то параметров. Задания действий осуществляются с помощью функции, заданной в al. Таким образом обработчик должен прежде всего проверить номер процесса в ah и при обнаружении своего номера проанализировать al и выполнить затребованные действия, после чего с помощью iret передать управление вызвавшей программе. Однако, если обработчик обнаружил в ah - номер чужого процесса, он должен командой jmp передать управление по цепочке тому обработчику, адрес которого был ранее в векторе 2fh. В результате вызов int 2fh из любой программы будет проходить по цепочке через все загруженные программы, пока не достигнет «своей» программы или не вернет управление в вызвавшую программу через обработчик DOS, который, очевидно, всегда будет самым последним в цепочке.
Часто через дополнительные регистры передается символьная информация, например имя программы. Например если программа dump.com проверяет можно ли остаться резидентным в памяти, то получив в al код ffh и в регистрах cx и dx символьные коды ‘du’ и ‘mp’, то она уверена, что её копия уже есть в памяти. Если же в al - ffh, а в cx и dx - другие коды, то уже есть процесс с нашим номером, в этом случае можно сменить функцию или воспользоваться альтернативным мультиплексным прерыванием int 2dh. int 2dh ah - мультиплексный номер al - функция 00h - проверка инсталляции Возврат al=0 -не установлен al=ffh установлен cx-версия dx:di - строка сигнатуры al=02h - выгрузка
Пример: int_2fh_vector DD? int_2fh proc far cmp ax,0b700h; или 0c700 jne Pass_2fh mov al,0ffh iret Pass_2fh: jmp dword ptr cs:[int_2fh_vector] int_2fh endp ;====================================== begin: mov ax,0b700h; установить статус процесса мультиплексного прерывания int 2fh cmp al,0 jz not_installed
lea dx,msg call print int 20h msg db ‘Программа уже инициализирована’, 13, 10, ‘$’
not_installed
Программа не должна использовать мультиплексный номер. Программа должна сканировать мультиплексные номера с 00h по ffh, запомнить первый свободный, т.е номер процесса, который не инсталлирован. Программа должна сравнивать 16 байт сигнатуры для всех мультиплексных номеров, которые используются с целью определения - is already installed. (установлена ли программа на этом номере). Если не установлена, то берется первый свободный номер. Формат сигнатуры: offset size descriptor 00h 8 bytes имя произв 08h 8bytes имя прогр. 10h 64bytes asciz опсание продукта
|
|||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 262; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.255.162 (0.009 с.) |