требуется перехватить юзермодный кодес, обработать его в дровине и вернутся обратно... как это можно реализовать? в мой моск единственное пришло, сделать в юзермодном коде типа: mov eax,1234h int 2e далее написал обработчик 2e прерывания, смотрю номер, если 1234h восстанавливаю юзермодный потертый код и пытаюсь передать управление, тупо jmp API ... дело работает до первого JMP дальше там нет памяти и падает в итоге ... подскажите в какую сторону капнуть?
В первую очередь копать необходимо в сторону орфографического словоря... А вообще, мало ли что там. Стек может рушится. Ты код лучше бы показал.
Что значит обработать код? Для вызова r3->r0 лучше не хукать 2E, а добавить новое прерывание, допустим, 0xEC и с ним уже колбаситься. Или сделать call gate Вообще такие прыжки между уровнями привилегий к добру не приведут.
Я думаю автор задумал что-то вроде перехвата сплайсингом юзермодного кода с помещением обработчика в ядро. Но что-то сильно пахнет гемороем...
Код (Text): address: dd 0 handler: ; тут твои действия jmp near [address] init_handler: sidt fword [esp - 6] mov eax, [esp - 4] lea eax, [eax + 0x2E SHL 3] mov bx, word [eax + 6] ror ebx, 16 mov bx, word [eax] mov dword [address], ebx mov ebx, handler pushfd cli mov word [eax], bx shr ebx, 16 mov word [eax + 6], bx popfd ret
хукай в том же user-mode, если нужна помощь драйвера - используй коммуникацию user-mode обработчика хука с дровом, хотябы через DeviceIoControl(); для перехвата можно использовать наработки Microsoft Research - Detours. Мне кажется так будет правильнее, не то эти изобретения пахнут уязвимостями повышения привилегий и еще непонятно чем