|
|
| Посл.отвђт | Сообщен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 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.048 |