try macro hidden_branch:req
pushad ;; Save current state.
mov esi, hidden_branch ;; Hidden branch address.
push esi
assume fs:nothing
push dword ptr [fs:0] ;; Save old exception handler.
mov [fs:0], esp ;; Install new handler.
endm
catch macro
mov esp, [esp+8] ;; Exception occured, get old ESP.
pop dword ptr [fs:0];; Restore old exception handler.
add esp, 4 ;; ESP value before SEH was set.
popad ;; Restore old state.
endm
continue macro
pop dword ptr [fs:0];; Restore old exception handler.
add esp, 36 ;; ESP value before SEH was set.
endm