
27.12.2011, 19:41
|
|
Познавший АНТИЧАТ
Регистрация: 30.09.2010
Сообщений: 1,168
С нами:
8219126
Репутация:
288
|
|
Сообщение от Chrome~
Нет. Здесь нужен дизассемблер длин. Если использовать способ с перезаписыванием первых 5 байт, то алгоритм примерно такой:
0. С помощью дизассемблера длин выделяем столько целых первых команд перехватываемой функции, длина которых >= 5. Запоминаем эту длину в переменную
len
.
1. Запоминаем адрес следующей команды в переменную
next_opcode
.
2. Выделяем
len + 5
байт памяти, адрес этой памяти записываем в переменную
old_func
.
3. В выделенный участок памяти копируем первые
len
байт из перехватываемой функции и дописываем команду
jmp next_opcode
(для нее мы выделели 5 дополнительных байт).
4. Перезаписываем первые 5 байт перехватываемой функции командой
jmp
.
5. Когда нужно вызвать старую функцию, делаем
call old_func
.
гемморно.хотя я хз,тестил без дизасма-все прекрасно работает.
|
|
|