; War3_Dl hook inside jass node creation switch ; First we scan to find the ecx variable for the mem allocation and also find the ; low and high range for the switch table cases. ; Then we do two sub repeating scans to hook all memory allocations after patching ; in the ecx variable to the scan patterns. ; Scan low pattern ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 6F6B4F4E |. 57 PUSH EDI ; 6F6B4F4F |. 68 8C36846F PUSH game.6F84368C ; ASCII "Jass2/Nodes.h" ; 6F6B4F54 |. 57 PUSH EDI ; 6F6B4F55 |. B9 DCC9876F MOV ECX,game.6F87C9DC <--- we need that constant ; 6F6B4F5A |. E8 D95E95FF CALL ; 6F6B4F5F |. 3BC7 CMP EAX,EDI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Scan high pattern ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 6F6B6FFA |. C2 0400 RETN 4 ; 6F6B6FFD |> 5F POP EDI ; Default case of switch 6F6B694C ; 6F6B6FFE |. 5E POP ESI ; 6F6B6FFF |. B8 01000000 MOV EAX,1 ; 6F6B7004 |. 5B POP EBX ; 6F6B7005 |. 8BE5 MOV ESP,EBP ; 6F6B7007 |. 5D POP EBP ; 6F6B7008 \. C2 0400 RETN 4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; War3DiHook proto stdcall :dword, :dword, :dword skip jassnode_switch_scan_low dd 0 jassnode_switch_scan_high dd 0 skip_end reset scan db 057h db 068h, 000h,000h,000h,000h db 057h db 0b9h, 000h,000h,000h,000h db 0e8h, 000h,000h,000h,000h db 03bh,0c7h db 0ffh db 0ffh, 000h,000h,000h,000h db 0ffh db 0ffh, 000h,000h,000h,000h db 0ffh, 000h,000h,000h,000h db 0ffh,0ffh scan_end setoffset 8 read a32, write_ecx_param_here_a read a32, write_ecx_param_here_b setoffset 7 saveaddr jassnode_switch_scan_low scan db 0c2h, 004h,000h db 05fh db 05eh db 0b8h, 001h,000h,000h,000h db 05bh db 08bh,0e5h db 05dh db 0c2h, 004h,000h db 0ffh, 0ffh,0ffh db 0ffh db 0ffh db 0ffh, 0ffh,0ffh,0ffh,0ffh db 0ffh db 0ffh,0ffh db 0ffh db 0ffh, 0ffh,0ffh scan_end saveaddr jassnode_switch_scan_high setlow jassnode_switch_scan_low sethigh jassnode_switch_scan_high scan db 0b9h write_ecx_param_here_a: db 000h,000h,000h,000h db 0e8h db 0ffh, 0ffh,0ffh,0ffh,0ffh db 0ffh scan_end setoffset 6 write r32, War3DiHook continue setlow jassnode_switch_scan_low sethigh jassnode_switch_scan_high scan db 0b9h write_ecx_param_here_b: db 000h,000h,000h,000h db 000h,000h db 0e8h db 0ffh, 0ffh,0ffh,0ffh,0ffh db 000h,000h db 0ffh scan_end setoffset 8 write r32, War3DiHook continue