zoukankan      html  css  js  c++  java
  • 结构化异常处理(通过设置CONTEXT结构实现反跟踪)

      以下内容摘录自《加密与解密》:

      结构化异常处理是Windows操作系统处理程序错误或异常的技术。在一个应用程序发生错误时,Windows挂起程序,并交由调试器处理,当调试器不能处理时,则调用程序的线程相关的SEH异常处理函数。

      异常处理函数可以有一个或多个,采用链表的结构将他们链接起来。当前的处理函数如果不处理,并且有多个处理函数时,可以交由链起来的其它异常处理过程进行处理。

      如果程序线程的异常处理函数均选择不处理,如果处于被调试状态,操作系统挂起程序通知调试器。

      这时有两种可能:

      (1)如果程序未处于被调试状态或者调试器仍然未能够处理,并且程序调用了API函数SetUnhandledExceptionFilter设置了与进程相关的异常处理过程的话,系统转向它的调用。

     

      (2)如果程序没有设置进程相关的异常处理过程或者进程相关的异常处理过程也未能处理这个异常,系统调用默认的系统异常处理程序。可以选择终止程序,或者最后将其附加到调试器上的“取消”按钮。如果没有调试器能被附加于其上或调试器还是处理不了异常,系统就终止程序。

      

      不过在终止之前,系统再次调用发生异常的线程中所有的异常处理过程,其后程序就终结了。

     

      基本的概念是:SEH是系统发现异常或错误时,在终结应用程序之前给应用程序的一个最后改正错误的机会。

     

      SEH相关数据结构有:TEB、_EXCEPTION_REGISTRATION、EXCEPTION_POINTERS(异常发生时,系统向引起异常的线程的堆栈里压入该结构),EXCEPTION_POINTERS中包含两个指向结构的指针,分别是:Exception_Record、CONTEXT.

     

      通过修改CONTEXT结构中的成员,可以设置线程的环境,将调试寄存器清零,使断点失效,以达到反跟踪的目的。

      

    我们一路奋战,不是为了改变世界,而是不让世界改变我们 ——《熔炉》
  • 相关阅读:
    sublime3环境
    解决打开github速度慢的问题
    git提交时候报错:The file will have its original line endings in your working directory.
    github上搭建自己的个人主页
    Git连接github不用每次输入用户名和密码的方法
    学习网站
    hbuilder入门
    img onerror事件
    Apache ActiveMQの版本更迭和Apache ActiveMQの故障转移
    oracle性能优化----处理大数据量数据
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5049536.html
Copyright © 2011-2022 走看看