Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Резидентные Программы    >>    checktsr
   
 
 Проверка загруженности резидента  Константин Поддубный 30.11.1995

Особенности выгрузки резидентных программ



1k 
 

From: "Constantin Poddubny" <const@const.krasnoyarsk.su> Subject: Re: Как удалить свой резидент ? Organization: The Sosnovoborsk Municipal Venture for Housing and Date: Mon, 30 Jan 1995 06:04:47 GMT Андрей Динарис спрашивал: > Приветик Всем, кого застал ! > > Вот такой вопрос чайниковский. Как средствами Паскаля и минимум > встроенного ассемблера, запустив эту же резидентную программу просто > второй раз или с ключем, определить, что в памяти уже сидит этот резидент > и выколупать его оттуда. > Загоняется то он туда просто, а вот оттуда... ;-/ > Каким образом осуществить намерения Тараса Бульбы ? ;) > > Cпасибо. > Счастливо оставаться ! > Андрей Динарис. > Как-то я решил написать собственный TSR-русификатор - уже существующие мне по той или иной причине не нравились. Отрывки из этого русификатора, адаптированные к Паскалю я и привожу. { функция AnybodyHere возвращает True, если запускаемая резидентная программа, перехватывающая прерывание Vector, уже есть в памяти. При этом происходит сравнивание первых Number байт новой запускаемой программы и старой, уже находящейся в памяти. } function AnybodyHere( Vector: byte; Number: word ):boolean; assembler; asm cld mov al,Vector mov ah,35h int 21h { получить адрес вектора в es:bx } mov si,bx { ds:si - адрес начала новой подпрограммы } { обработки прерывания Vector } mov di,bx { es:di - адрес начала старой подпрограммы } { обработки прерывания вектор } mov cx,Number { число сравниваемых байт } xor ax,ax repe cmpsb { сравнить сигнатуры } je @1 mov al,False jmp @2 @1: mov al,True @2: end; Точно не знаю, но, по-моему, именно таким образом происходит определение наличия резидентного вируса при повторном запуске зараженной программы дабы вирус не паразитировал на себе. Эта функция может быть полезна для запрещения повторной загрузки резидентной программы, а также для выгрузки ее из памяти. { процедура Unload восстанавливает адрес программы обработки прерывания, который был установлен до загрузки новой