Здраствуйте. У мну есть файлик Test.exe + word.dll. В Test.exe я сначала вывожу с длл-ки word.dll метод Word() вывод: - "Word from Dll Normal\n" Потом хукаю метод и опять вывожу - "Word is Hooked\n" Вопрос как можно сделать что б я имел доступ к старому методу выво которого - "Word from Dll Normal\n", без снятия хука. Сам проект: http://dump.ru/file/4561840. VS 2008 Забыл нада юзать чистый Си. не С++
а пример) моно имхо я больше ява и шарп)(совсем другое) Я пробывал у мну чето вызывалась новая(захуканая)...
чтобы вызвать старую функцию тебе надо при хуке запоминать байты Code: BYTE old1 = *(BYTE*)pfnDst; // JMP FAR DWORD old2 =*(DWORD*)((DWORD)pfnDst+1); и когда надо вызвать старую функцию возвращаешь байты назад...
а можно пример ибо для мну указатели и управления памьять - это капец, путаюсь)) Смотри мне нужно хукнуть метод, и с хукнутого иметь доступ к старому, прослойка - как говоря. Мож помочь? имхо соображалка работает ток опыта мало
вот и выросло поколение, которое не умеет работать и думать памятью... Вобщем надо сменить реализацию хука. Спертые байты переть не по пяткаку, а целыми командами с помощью дизасма длин(учитывая стабильность функции можно просто руками забить длины) и в надежде не словить в начале функции относительных переходов. Переписываем команды на новое место/ originalWordCall: ; тут спертые первые байты jmp originalFuncNotSplicedCodeStart ; адрес с которого в оригинале идут нетронутые байты В момент хука высчитываем 4 байта перехода для команды call, чтобы попасть на originalWordCall и меняем их на лету, либо юзаем указатели на функции(хз есть ли они в си) и без всякого гемора Code: void (*originalWordFunc)(); void callOriginal(){ originalWordFunc = originalWordCall; (*originalWordFunc)(); } Как то так. Гугл на тему сплайсинга раскроет тему пошире. Давно я этим баловался, могут быть косяки.