10.默认过滤器和JIT调试

2018-02-23  本文已影响0人  bluewind1230
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,下面讲一讲这个函数的核心逻辑:
它有三个功能:

image.png
上一篇下一篇

猜你喜欢

热点阅读