• 第三章系统机制 (p 107 p 117 )2009621


    1. APC

    2. 异常分发

    1) 异常是一个同步条件 。。

    2)异常包括那些?常见的有调试器断点异常 。。除0异常 。。溢出 。。内存访问违例。。。

    这些异常在IDT中处于最靠前的位置 。。从IDT0 --- IDT11  IDT0就是 除0 错误异常 。。。

    3)异常如何被捕获? 目前只知道 内核以透明与用户程序的方式捕获异常 。。具体的还不知道 ?

    4)异常如何分发处理 ?

    当cpu捕获异常时, cpu将控制权转交给 陷阱处理器 。。陷阱处理器在内核栈中建立陷阱帧。。。这样在异常被处理后还能恢复到异常发生的地方继续执行。

    然后异常分发器 开始发挥作用。。

    a. 对于内核模式异常。。。 异常分发器只是简单的调用一个routine找到一个异常处理器 。。然后将该异常交给异常处理器执行。。 书上说 。。。未处理的内核异常是很严重的错误。。所以 可以假定。。总是可以找到一个异常处理器。。

    b. 对于用户模式异常。。

    windows子系统有一个调试端口和一个异常端口 。。。通过他们 接受用户进程的异常通知。

    处理过程如下:

    1)首先 查看产生该异常的进行有没有调试进程。。。有。。在xp下。。异常分发器会向该进程相关 的调试对象发送一个调试器对象消息 。。

    2)上述没有处理 。。。windows切换到用户模式下。。然后copy 陷阱帧到content结构中。。并查找一个异常处理器。。然后执行。。。

    3)继续。。。切换到内核模式下。。。给调试器进程发第二次消息。。。(大名鼎鼎的 second chance)

    4) 如果存在异常端口。。内核向该端口发异常通知。。csrsss会受到该通知。。然后弹出一个对话框通知用户。。然后终止进行。。

    5)上述都失败。。。则交给默认的异常处理器完成 。。。便是终止发生异常的进程。。。

     

     

    未处理的异常。。。

    该异常实在进程或线程启动过程中声明的。。

    一般是:

    void win32StartProcess()

    {

          __try{

                DWORD  ld = lpStartAddress(pa);

              ExitThread( ld );

               }__except(UnhandlerdExceptionFilter )

                {

                      GetEx.........

                     ExitProcess();

          }

    }

     

    7) 相关的注册表内容。。。。

    HKLM\Microsoft\windows NT\currentVersion\AgDebug 

    值:

    1  Auto  自动启动调试器 。。 

    Debugger  指向一个调试器路径。。。。

    默认的调试器是: C:\WINDOWS\system32\drwatson.exe

    8) windows  xp 错误报告机制。。。

     

     

     

     

     

     

     

     

  • 相关阅读:
    (转)大型网站架构演变和知识体系
    最小生成树-Prim算法和Kruskal算法
    最短路径——Floyd-Warshall算法
    SpringBootService,一个基于spring boot搭建的SOA服务框架
    Netty(六)UDP在netty中的使用
    Netty(五)序列化protobuf在netty中的使用
    Netty(四)分隔符与定长解码器的使用
    Netty(三)TCP粘包拆包处理
    Netty(二)入门
    Netty(一)引题
  • 原文地址:https://www.cnblogs.com/herso/p/1507983.html
Copyright © 2020-2023  润新知