F1 proc;注册SEHpushoffset F1Handler; handler push 自己异常回调函数的地址pushfs:[0];next ;push 调用者异常处理结构体信息地址movfs:[0],esp;注册回调函数,移位此时esp 存的就是结构体首地址xoresi,esidivesi;卸载SEHpopfs:[0];把 next 弹回 fs:[0]addesp,4;平栈,因为自己的异常回调函数地址不需要弹...
_Handler proc _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext LOCAL @szBuffer[256]:byte pushad mov esi,_lpExceptionRecord mov edi,_lpContext assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT invoke wsprintf,addr @szBuffer,addr szMsg,[edi].regEip,\ [esi].ExceptionCode,[esi].Excepti...
当程序执行到_Proc2中间的时候,堆栈中的数据如图14.4的右边所示,最下方是_Proc2注册异常处理回调函数使用的EXCEPTION_REGISTRATION结构,现在fs:[0]指向这个结构,上面一点是_Proc2使用的局部变量、返回地址等,再上面就是注册_Proc1中异常处理回调函数使用的EXCEPTION_REGISTRATION结构了。 当_Proc2中发生溢出异常时,_Proc...
SEH异常处理回调函数的参数定义与筛选器回调函数的参数定义有所不同,其定义如下: _Handler proc _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext 在这个回调函数中,前面的3个参数是要用到的。其中的_lpExceptionRecord参数指向一个EXCEPTION_RECORD结构;_lpContext参数指向一个CONTEXT结构,这两个结构提供的...
处理 F1 异常的回调函数 F1Handler proc uses esi pER:ptr EXCEPTION_RECORD, pFrame:dword, pContext:ptr CONTEXT, pDC:dword invoke MessageBox, NULL, offset g_szF1, NULL, MB_OK ;ExceptionContinueExecution, - 程序继续执行 ;ExceptionContinueSearch, - 此异常我不处理,交给其它处理 ;异常交给F0 的 异常...