Ладно, вброшу сюда свой 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
			
		 |