| 
 
				Ладно, вброшу сюда свой low-level бред для начинающих. 
Простейшая stdcall-ная функция установки хука на асме имеет вид:
 
Code:
 mov eax, [esp + 0x0C]lea eax, [eax + 0xE8]
 mov ecx, [esp + 8]
 mov edx, [esp + 4]
 mov [edx], al
 lea eax, [edx + 5]
 sub ecx, eax
 mov [edx + 1], ecx
 ret 0xC
 
3 параметра: адрес для помещения хука, адрес dll-процедуры, тип хука (0 - call, 1 - jump).
 
Некоторые люди ещё юзают VirtualProtect до и после установки хука, но в Воге это не нужно. 
Ещё бывает, что остаток изменённого кода затирают nop-ами, но мне лично это ни разу не понадобилось: call-ом обычно замещается тоже вызов функции, так что длина опкода остаётся той же, а jump позволяет всё равно прыгать после возврата на корректный адрес. Вообще, куда и как ставить хук - отдельная история, но сам стараюсь ставить так, чтобы он менял только 5 байт.
 
Ещё более минималистская форма (без процедуры) массовой установки хуков - из Drew.dll:
 
Code:
 ...mov esi, offset Hook_Table
 LoopHooks:
 mov al, [esi+8]
 mov ecx, [esi+4]
 mov edx, [esi]
 mov [edx], al
 lea eax, [edx+5]
 sub ecx, eax
 mov [edx+1], ecx
 add esi, 9
 cmp esi, End_Hook_Table
 jl LoopHooks
 ...
 ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
 TJump equ 0E9h
 TCall equ 0E8h
 
 Hook MACRO ExeAdress, ProcDrew, TypeHook
 dd ExeAdress
 dd ProcDrew
 db TypeHook
 ENDM
 
 Hook_Table:
 ; 1. ДИАЛОГ СТАРТОВЫХ ХАРАКТЕРИСТИК ГЕРОЯ
 Hook 569DECh, StartHeroDialog, TCall
 Hook 5826ACh, StartHeroDialog, TCall
 Hook 5828C6h, StartHeroDialog, TCall
 ; 2. ОПЦИЯ ЗАПРЕТА ОТОБРАЖЕНИЯ ЭКРАНА ЗАГРУЗКИ КАРТЫ
 Hook 4ED9E0h, change_LoadScreen, TJump
 Hook 4EF83Ch, change_LoadScreen1, TJump
 ; 3. ВСТАВКА ТЕКСТА ИЗ БУФЕРА ОБМЕНА
 Hook 5BB500h, MainKeyboard, TJump
 ; 4. ИМЕНА ИГРОКОВ ДЛЯ ХОТ-СИТА
 Hook 51231Fh, MultiPlayerButtons, TJump
 Hook 512221h, MultiPlayerload_file_10_mop, TJump
 Hook 512276h, MultiPlayerStrings_realize, TJump
 Hook 512696h, MultiPlayerDialogresult, TJump
 Hook 50E229h, MultiPlayerInterdiction, TJump
 ; 5. УВЕЛИЧЕНИЕ КОЛИЧЕСТВА ЗАКЛИНАНИЙ В ИГРЕ
 Hook 59CD5Bh, SpellsExpand1, TJump
 Hook 4D8F77h, SpellsExpand2, TJump
 Hook 4D8B6Ah, SpellsExpand3, TJump
 Hook 4D95A8h, SpellsExpand4, TJump
 End_Hook_Table:
 Circle of destruction, hammer comes crushing
 Powerhouse of energy
 Whipping up a fury, dominating flurry
 We create the battery
 |