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

  #8  
Старый 27.12.2011, 19:41
DooD
Познавший АНТИЧАТ
Регистрация: 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
.
гемморно.хотя я хз,тестил без дизасма-все прекрасно работает.
 
Ответить с цитированием