其他分享
首页 > 其他分享> > SEH结构化异常处理

SEH结构化异常处理

作者:互联网

GetThreadContext和SetThreadContext可获取和设置线程上下文,调用前先SuspendThread,完毕后再ResumeThread。

 

CPU抛出的都是硬件异常,操作系统和软件抛出的异常称为软件异常。

异常过滤程序(exception filter)和异常处理程序(exception handler)由操作系统负责执行。

结构化异常处理Structured Exception Handling

 

SetUnhandledExceptionFilter给了我们处理异常的机会,抛出的未处理异常会被参数指定的异常过滤函数执行,函数要返回以下三者之一:

EXCEPTION_EXECUTE_HANDLER :从UnhandledExceptionFilter返回并执行关联的异常处理程序,程序流程不能继续执行,通常导致进程终止。

EXCEPTION_CONTINUE_SEARCH :从UnhandledExceptionFilter返回,并从异常开始继续执行。

EXCEPTION_CONTINUE_EXECUTION :继续搜索上一级。

 

由于附加了调试器,系统优先把异常交给调试器,我们设置的异常过滤函数无法执行,UnhandledExceptionFilter中调用了ZwQueryInformationProcess,参数ProcessInformationClass 传递了ProcessDebugPort,用来检测是否被调试,被调试则不执行我们设置的异常过滤函数。手动更改跳转,或者让其传递ProcessDebugPort调用时返回0,就可以调试自己的异常过滤函数了。

 

Masm32中跨函数访问标号标号时,需要在定义标号处写::符号,例如:

Foo proc

FUNC_START::

Foo endp

 

一个基于SEH的反调试的例子,检测代码中是否有CC断点。

 

 

 

 

 

标签:结构化,函数,EXCEPTION,UnhandledExceptionFilter,过滤,异常,调试,SEH
来源: https://www.cnblogs.com/Nutshelln/p/13747854.html