Показать сообщение отдельно

  #11  
Старый 04.05.2010, 03:44
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

вот и выросло поколение, которое не умеет работать и думать памятью...

Вобщем надо сменить реализацию хука. Спертые байты переть не по пяткаку, а целыми командами с помощью дизасма длин(учитывая стабильность функции можно просто руками забить длины) и в надежде не словить в начале функции относительных переходов. Переписываем команды на новое место/
originalWordCall: ; тут спертые первые байты
jmp originalFuncNotSplicedCodeStart ; адрес с которого в оригинале идут нетронутые байты


В момент хука высчитываем 4 байта перехода для команды call, чтобы попасть на originalWordCall и меняем их на лету, либо юзаем указатели на функции(хз есть ли они в си) и без всякого гемора
Код:
void (*originalWordFunc)();

void callOriginal(){
    originalWordFunc = originalWordCall;
    (*originalWordFunc)();
}
Как то так. Гугл на тему сплайсинга раскроет тему пошире. Давно я этим баловался, могут быть косяки.
 
Ответить с цитированием