-
-
[求助]SEH Handler中切换堆栈?
-
发表于:
2015-5-31 10:02
4042
-
o_esp是用local声明的DWORD局部变量
假定这个异常正发生在MessageBoxA入口处。
执行到最后 o_esp的值变成了 3
;切换堆栈
mov o_esp,esp
mov eax,[edi].regEsp
mov esp,eax
;构造函数框架
push ebp
mov ebp,esp
mov eax,[ebp+12]
invoke crt_printf,eax
leave
mov esp,o_esp
完整代码:
_Handler proc C _lpRecord,_SEH,_lpContext,_lpDispCotext
LOCAL @szBuffer[256]:byte
LOCAL old:dword
LOCAL o_esp:dword
pushad
mov esi,_lpRecord
mov edi,_lpContext
assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
invoke crt_printf,addr szMsg,[edi].regEip,[esi].ExceptionCode,[esi].ExceptionFlags
;切换堆栈
mov o_esp,esp
mov eax,[edi].regEsp
mov esp,eax
;构造函数框架
push ebp
mov ebp,esp
mov eax,[ebp+12]
invoke crt_printf,eax
leave
mov esp,o_esp
invoke VirtualProtect,[edi].regEip,1,PAGE_EXECUTE_READWRITE,addr old
;mov eax,_SEH
;mov eax,[eax+4*2]
;mov [edi].regEip,eax
assume esi:nothing,edi:nothing
popad
mov eax,ExceptionContinueExecution
ret
_Handler endp
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)