美文网首页
10.默认过滤器和JIT调试

10.默认过滤器和JIT调试

作者: bluewind1230 | 来源:发表于2018-02-23 15:07 被阅读0次
    image.png

    假设一个异常到了用户态,找了所有异常处理函数,都不处理,怎么办,那些应用程序的那些try,handle都说不处理,这时候这样的异常叫做无人处理的异常,此时就会使用默认的异常处理函数,默认的异常处理函数对于应用程序来说有几个,对于初始线程,BaseprocessStart会注册一个默认的异常处理器;
    对于vc编译器编译器编译的,它会插入一个启动函数,它里面也有一个异常处理器;
    对于非初始线程,线程的启动函数它有一个默认的异常处理器;
    内核态它也有默认处理,它会崩溃,显示BSOD;

    应用程序的默认处理就是弹出这些对话框;

    image.png

    这些都代表了应用程序发生了异常,程序自己又不处理,交给操作系统默认处理,这些对话框的名字叫AE对话框!
    这些对话框弹出来都是有特殊的机制的,Vista是用wer创建一个特殊的进程来显示UI,XP是用dwwin创建一个特殊的进程,之前呢是Windows子系统服务进程CSRSS,它报告这样的特殊对话框,这个对话框就是error机制;
    以Win7为例:


    image.png

    上边最左边发生出错的那个进程,全都不处理,默认的那个异常处理是采用默认逻辑,默认逻辑有一个动作是采用默认LPC端口发给WER的服务进程,专门有一个的,Windows错误报告处理,服务进程收到请求之后,创建WER
    fort的界面,然后这个界面就给大家看,这个处理意见还可以再返回来影响处理过程;
    做默认处理,有一个著名函数叫UnhandleExceptionFilter;


    image.png

    UnhandleExceptionFilter这个函数很复杂,伪代码见软件调试P322,下面讲一讲这个函数的核心逻辑:
    它有三个功能:

    • 调用顶层异常过滤函数:SetUnhandledExceptionFilter
      通过这个API可以设立一个过滤函数,此过滤函数在这种情况下可能被调用,这个API有一个缺点,A设了就是A的,B设置了就会把A的覆盖掉,所以说这个函数你设置了,但是说你发生异常的时候不一定还是你设置的,因为别人调用了把你的覆盖掉了,所以说这种方式不是太可靠,但是动作是在这里做的;

    • UnhandledExceptionFilter另外一个作用是通知应用程序作用;

    • 启动JIT调试器(即时调试,即时调试代表这Windows操作系统的强大支持),即时调试就是在注册表里里面,在这个表键下,AEDebug,(AE代表Applycation error)


      image.png
      image.png

      -p 指定被调试进程 -e(even)
      它们的具体对话代表着非常完美,比如说应用程序出错了,代表开始调试它,弹出应用程序对话框,你启用了即时调试,对话框里就会多一项你要不要调试,你想要调试,被调试进程就会启用调试器,也可以自动可以开始这个过程,(5'37")


      image.png
      自动的话,被调试进程这里先创建CreateEvent(),然后创建调试器进程,然后就开始等调试器进程和Event
    image.png

    相关文章

      网友评论

          本文标题:10.默认过滤器和JIT调试

          本文链接:https://www.haomeiwen.com/subject/ltjxxftx.html