· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Обработчик прерываний

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Ноя 15, 2004 13:55:27

zss
а вот irql тут вообще не при чём .


Дата: Ноя 15, 2004 16:12:19 · Поправил: zss

>> Интересно, хотелось бы увидеть код

Это обработчик int1
StartAddress и CurrAddress - глобальные dd
ModuleImage - глобальная структура
OldHandler - старый обработчик

смысл - смотрим адрес. Если он является точкой входа какой-либо функции, то это мой int1 и я возвращаю оригинальный байт, ставлю трассировку и cli.
Через 1-2 инструкции я опять попадаю в обработчик. Проверяю - если адрес != 0 то опять ставлю int1

Иначе, если есть старый обработчик - то передаю ему управление, если нет, то просто iretd
pop	[CurrAddress]
pushad

cmp	dword ptr [StartAddress], 0
jz	_nonflag

// флаг взведен

mov	ebx, cr0
push	ebx
and	ebx, ~0x10000
mov	cr0, ebx			

mov	esi, [StartAddress]
mov	al, 0xF1
mov	byte ptr [esi], al

pop	ebx
mov	cr0, ebx

mov	dword ptr [StartAddress], 0
popad
push	[CurrAddress]
and	dword ptr [esp + 8], 0xFFFFFEFF // TF	
or	dword ptr [esp + 8], 0x00000200 // cli
iretd

_nonflag:

mov	esi, [CurrAddress]
dec	esi
push	esi
lea	eax, [ModuleImage]
push	eax
call	IsFunc
test	al, al
je	_error

// начало функции

mov	[StartAddress], esi
mov	ebx, cr0
push	ebx
and	ebx, ~0x10000
mov	cr0, ebx			

mov	byte ptr [esi], al
pop	ebx
mov	cr0, ebx

push	[StartAddress]
call	WriteHookData

popad
push	[StartAddress]
or	dword ptr [esp + 8], 0x00000100 // TF
and	dword ptr [esp + 8], 0xFFFFFDFF //cli
iretd

_error:

mov	eax, [OldHandler]
test	eax, eax
je	_nonhandler

popad
push	[CurrAddress]
jmp	[OldHandler]

_nonhandler:
// нет обработчика
popad
push	[CurrAddress]
iretd

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.048