Перехватываемая функция имеет следующее начало: push esi push edi call ffffe456 При использовании HookProc вызов "правильной" функции из перехваченной приводит к вылетанию программы, т.к. в первых пяти байтах, сохраненных черти-где, имеется переход по относительному смещению - относительно СТАРОГО положения команды CALL, потому это переход "в никуда". Я так понимаю, нужно HookCode дополнить кодом для проверки этих 5 байт на наличие относительных переходов/вызовов и их корректировки? Или я чего-то не понимаю?
Гм... А чем MS-Rem'a не устроили стандартные хуки винды, что он такую кучу кода накатал и статью про это написал? Тут вопрос стоит не концептуально, а чисто прагматически: вот, нашелся в этой функции проезд... если кто будет использовать, чтоб имел в виду.
А вот поэтому надо делать хукинг с помощью восстановления затертых байт(хотя мне этот способ не нравицца) - 100% что все будет пахать!
Да собственно и HookProc тоже пашет если дописать туда что-то типа if (! lstrcmp(lpProcName,"Жуткая_функция") ) { offs=*((DWORD*)((DWORD)*OldProc+3)); *((DWORD*)((DWORD)*OldProc+3))=offs-(DWORD)(*OldProc)+(DWORD)fnAdr; } Дизассемблер лень было дописывать, и код наверное корявый, и вообще я не хакер а токо учусь.