`
deepfuture
  • 浏览: 4397573 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80021
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69987
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103284
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285606
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15001
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67489
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32095
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45963
社区版块
存档分类
最新评论

windows陷阱分发机制

阅读更多
1、中断与异常是导致控制流转向的条件,硬件或软件可以检测这两种条件。
2、内核对待中断的态度是:中断是异步事件,与处理器当前执行的任务无关;异常是同步事件,是一个特殊指令执行的结果
3、异常和中断发生时,如果该线程在用户模式下执行,到该线程内核模式栈,在内核栈上创建一个陷阱帧,把线程的执行状态保存到该帧里。陷阱帧是线程完整执行环境的一个子集。
4、内核安装了前端陷阱处理函数,在内核将控制权转交给与该陷阱相关的函数前,由这些前端函数来执行一些常规的陷阱处理任务,通常是判断陷阱类型进行下一步的控制权转交工作。
5、中断分发,内核使用中断陷阱处理器来响应设备的中断。中断陷阱处理器或者将控制权给负责处理中断的外部例程(ISR),或者传递给一个响应该中断的内部内核例程。设备驱动程序提供了ISR来处理设备中断,内核为其他类型的中断提供了ISR
6、硬件中断处理。外部I/O中断进入到中断控制器的某一根线上,该控制器然后在一根线上中断处理器。一旦处理器被中断了,它询问控制器以获得此中断请求(IRQ)。控制器将IRQ转成一个中断号,做为中断分发表(IDT)中的索引,并将控制权传递给恰当的中断分发例程,每个处理器有单独的IDT。
==========
1、X86中断控制器
APIC为依赖于高级可编程中断控制器。由几个部件构成:
(1)专门接收设备中断的I/O APIC
(2)本地APIC
(3)一个与I8259A兼容的中断控制器
2、APIC在私有的APIC总线上接收到来I/OAPIC的中断,中断控制器负责把APIC输入转制成与PIC等价的信号
3、I/O APIC 负责中断传送算法
4、X64中断控制器
无法运行于不具有APIC的系统上
5、IA64中断控制器
依赖于SAPIC,中断不能过私有总线,通过I/O和系统总线传送
6、软件中断请求级别(IRQL)
X86用0到31,X64和IA64用0到15表示,数值大表示优先级高
7、X86中断请求级别从高到低:
高端、电源失败、处理器间中断、时钟、性能剖析、设备N,设备N-1。。。。设备1,DPC/DISPATCH,APC,被动
8、每个处理器有个可变化的可设置的IRQL值
9、访问PIC相对较慢,使用了PIC的HAL使用延迟IRQL,延迟写入处理器的IRQL值,当IRQL提升,HAL内部记录新的IRQL,不改变中断屏蔽值,如果一个更低的优先级中断接着发生,则HAL设置正确的IRQL值,并这个低优先级的中断延迟到IRQL被为止。
========
1、中断对象:内核提供了一种可移植的机制让设备驱动程序可以为它们的设备注册ISR,就是内核控制的中断对象
(1)它包含了供内核将一个设备的ISR与一个特定级别的中断关联起来而需要的信息,包括ISR地址、设备中断时所在的IRQL级别、以及内核中与该ISR关联的IDT项。
(2)当一个中断对象被初始化后,少量汇编语言代码指令被从一个中断处理模板中拷贝过来,保存在该对象中,这些代码调用了实际的中断分发器,并将指向该中断对象的指针传递给它。
2、当一个ISR与某个特定的中断级别关联起来,这一操作称为连接一个中断对象。将一个ISR与IDT项断开关联,则称为断开一个中断对象,这些操作通过调用内核函数IoConnectInterrupt和IoDisconnectInterrupt完成,使得设备驱动程序可以在加载到系统的时候打开一个ISR,如果驱动程序被卸载的话,可以关闭ISR
3、使用中断对象来注册一个ISR,可避免设备驱动程序直接操纵中断硬件,不必知道IDT的细节
4、中断对象使得内核很容易为任何一个中断级别调用多个ISR,如果多个设备驱动程序创建中断对象,可将它们连接到同一个ISR项上

=========

1、分发或延迟过程调用(DPC),当一线程不能继续运行的时候要求进行调度,内核请求分发操作,但将它推迟到完成了当前的行为后再进行。

2、当内核需要对共享数据结构的访问进行同步,它总是将处理器的IRQL提升到DPC/DISPATCH级别或更高,这禁止了另外的软件中断和线程分发动作,设备驱动程序利用DPC来完成I/O操作。
3、DPC是通过一个DPC对象来表示的,DPC对象是一种内核控制对象,它对于用户模式程序是不可见的,对于设备驱动程序和其他的系统代码是可见的。
4、正在等待执行的DPC例程被存储在由内核管理的队列中,每个处理器都有一个这样的队列,称为DPC队列。要想请求一个DPC,系统代码调用内核初始化一个DPC对象,然后把它放在一个DPC队列中。
5、内核按照DPC优先级把DPC对象放到队列的合适位置,高优先级在前。当处理器的IRQL降到DPC以下,内核开始处理DPC队列,直到队列为空,为了保证中间不受正常线程打扰,其IRQL一直保持在DPC状态。完成后,把IRQL降到DPC以下

============

1、异步过程调用中断(APC)提供在特定用户线程环境中执行用户程序和系统代码的途径。

2、APC由一个内核对象描述,称为APC对象。正在等待执行的APC驻留在一个由内核管理的APC队列中。DPC队列属于系统范围,而APC队列与特定线程相关,每个线程有它自己的APC队列,内核接收请求,将一个APC排除后,请求一个APC级别的软件中断,线程最终运行时,会执行此APC。
3、两种APC类型:用户模式和内核模式。用户模式需要获得用户线程的许可。内核模式的PAC不需要目标线程许可,就运行在该线程的环境中,可强行中断该线程并执行指定过程。内核模式PAC有普通和特殊两种,线程禁止普通的,调用KEENTERCRITICALREGION;将IRQL提升到APC_LEVEL禁止特殊和普通的
4、使用内核模式APC完成在特定线程的地址空间才能完成的操作系统任务
5、驱动程序也使用内核模式APC,I/O系统利用特定的APC将I/O操作结果手帕到包含等待纯种的进程地址空间的缓冲区
6、READFILEEX、WRITEFILEEX、QUEUEUSERAPC使用用户模式APC,READFILEEX、WRITEFILEEX允许调用者指定个完成例程,I/O完成机制通过在发起I/O的线程放一个APC。完成例程回调只在一个线程在可警告的等待状态时,用户模式APC才交付。
7、线程通过等待对象句柄如wiatformultipleobjectsex或直接测试是否有未处理的APC如sleepex。内核会中断正在等待的纯种将控制权给APC,当完成后再恢复线程运行。
8、APC交付可能会造成在对象的等待队列的重新排序,因为APC完成后,线程会被重新等待或重新执行。

============

1、异常是由当前正在运行的程序在执行过程中产生的条件。结构化异常处理使应用程序能在异常发生时获得控制,然后应用程序修正此条件,并返回到异常发生之处,将栈展开,或向系统报告,该异常不可识别。

2、X86平台,所有的异常都有预定义的中断号,这些中断号对应于IDT的表项,
0-除法错误
1-调试陷阱
2-NMI/NPX错误
3-断点
4-溢出
5-BOUND/打印屏幕
6-无效操作码
7-NPX不可用
8-双重异常
9-NPX段溢出
A-无效任务状态段
B-段不存在
C-栈错误
D-一般保护
E-页面错误
F-INTEL保留
10-符点
11-对齐检查
3、所有异常除了简单能通过陷阱处理器可以解决外,其余由异常分发器的内核模块服务。异常分发器必须找异常处理器。
4、环境子系统建立基于帧的异常处理器。将一个异常处理器与一个特定过程激活动作关联。当一过程被调用时,代表过程激活的栈帧压入栈,一个栈帧关联一个或多个异常处理器,每个异常处理器保护一块特定代码。出现异常,内核查找与栈帧关联的异常处理器,没有找到,找上一次栈帧的,直到找到为止,如果无法找到,内核使用自己的默认异常处理器。
5、异常发生,CPU将控制权给内核陷阱处理器,该处理器创建一个陷阱帧,以便解决异常后,能恢复运行。
6、内核发生异常,异常分发器只是简单地调用一个例程,找基于帧的异常处理器,由它处理异常。
6、用户模式的异常,异常分发器会做一些更加精细的工作。异常分发器首先查找异常进程关联的调试器进程,并发送调试消息;没有调试器进程,或调试器不处理该异常,进入用户模式,将陷阱帧按CONTEXT结构拷贝到用户栈并调用例程找到基于帧的异常处理器;没有找到或它仍然不处理异常,进行内核模式,再次调用调试器让用户二次机会的调试;如果调试器不运行,没找到基于帧的处理器,内核给该线程的进程关联的异常端口发消息,该端口由控制该线程的环境子系统注册,使环境子系统有机会将一个异常翻译成与特定环境相关的信号。
分享到:
评论

相关推荐

    深入解析Windows操作系统中文.part2.rar

    3.1 陷阱分发 85 中断分发 87 异常分发 109 系统服务分发 119 3.2 对象管理器 124 执行体对象 126 对象结构 128 3.3 同步 149 高IRQL的同步 151 低IRQL的同步 155 3.4 系统辅助线程 166 3.5 Windows全局标志 168 3.6...

    windows internals (5th)pdf

    第三章详细介绍了Windows内部的一些核心机制,包括陷阱分发、对象管理、同步机制等。 ##### 3.1 陷阱分发 陷阱分发是操作系统处理中断、异常和系统调用的方法。 ###### 3.1.1 中断分发 中断分发是指操作系统如何...

    《深入解析Windows操作系统》中文版 第四版 part1

    3.1 陷阱分发 3.2 对象管理器 3.3 同步 3.4 系统辅助线程 3.5 Windows全局标志 3.6 本地过程调用(LPC) 3.7 内核事件追踪 3.8 Wow64 3.9 本章总结 第4章 管理机制 4.1 注册表 4.2 服务 4.3 Windows管理规范 4.4 本章...

    深入解析Windows操作系统 中文版 第四版 part 4

    3.1 陷阱分发 3.2 对象管理器 3.3 同步 3.4 系统辅助线程 3.5 Windows全局标志 3.6 本地过程调用(LPC) 3.7 内核事件追踪 3.8 Wow64 3.9 本章总结 第4章 管理机制 4.1 注册表 4.2 服务 4.3 Windows管理规范 4.4 本章...

    深入解析windows 操作系统第6版第2-3章.中文版扫描

    3.1 陷阱分发 79 中断分发 81 定时器处理 110 异常分发 120 系统服务分发 130 3.2 对象管理器 137 执行体对象 139 对象结构 142 3.3 同步 174 高IRQL的同步 175 低IRQL的同步 180 3.4 系统辅助线程 202 ...

    windows程序教程

    这本书是C++程序员的宝贵资源,它探讨了如何通过优化代码结构、避免常见陷阱和理解C++底层机制来提高代码性能。书中的建议涵盖了内存管理、对象构造与析构、模板元编程等多个方面,对于深入理解C++和编写高效代码...

    《Windows原理与应用》复习要点.pdf

    8. **系统结构与机制**:这部分深入到操作系统的底层,讲解系统总体结构、系统组件以及陷阱分发、中断分发和同步机制。这些内容涉及到操作系统如何管理和调度资源,对于系统调试和性能优化至关重要。 在复习时,...

    Windows Internals+5th

    **3.1 陷阱分发** - **3.1.1 中断分发** - 中断是外部硬件向处理器发送信号的方式。这部分内容讲述了中断分发的机制。 - **3.1.2 异常分发** - 当处理器检测到无法正常执行指令的情况时,会引发异常。这部分内容...

    深入解析Windows操作系统 中文版 第四版 part 3

    3.1 陷阱分发 3.2 对象管理器 3.3 同步 3.4 系统辅助线程 3.5 Windows全局标志 3.6 本地过程调用(LPC) 3.7 内核事件追踪 3.8 Wow64 3.9 本章总结 第4章 管理机制 4.1 注册表 4.2 服务 4.3 Windows管理规范 4.4 本章...

    深入解析Windows操作系统 中文版 第四版 part 2

    3.1 陷阱分发 3.2 对象管理器 3.3 同步 3.4 系统辅助线程 3.5 Windows全局标志 3.6 本地过程调用(LPC) 3.7 内核事件追踪 3.8 Wow64 3.9 本章总结 第4章 管理机制 4.1 注册表 4.2 服务 4.3 Windows管理规范 4.4 本章...

    深入解析Windows操作系统 中文版 第四版 part 5

    3.1 陷阱分发 3.2 对象管理器 3.3 同步 3.4 系统辅助线程 3.5 Windows全局标志 3.6 本地过程调用(LPC) 3.7 内核事件追踪 3.8 Wow64 3.9 本章总结 第4章 管理机制 4.1 注册表 4.2 服务 4.3 Windows管理规范 4.4 本章...

    Windows Internals 5th

    - **陷阱分发**:如何处理中断、异常和服务调用。 - **对象管理器**:这是管理Windows内部对象的核心组件,包括对象结构和类型。 - **同步机制**:如何确保多个线程安全地访问共享资源。 - **系统工作线程**:这些是...

    Zabbix 用户手册 v1.8

    - **轮询与陷阱机制:** 同时支持轮询和陷阱机制,增强了灵活性。 - **跨平台支持:** 支持 Linux、Solaris、HP-UX、AIX、FreeBSD、OpenBSD 和 OSX 等多种操作系统。 - **高性能代理程序:** 为 Linux、Solaris、HP-...

    python官方3.4.0a4.amd64版本msi安装包

    MSI文件是一种标准的Windows安装程序包格式,通常用于软件分发和安装。通过双击这个文件,用户可以启动安装向导,按照提示步骤完成Python的安装。 在Python 3.4.0a4中,用户可以期待以下关键特性: 1. **增强的...

    VC++ 编程指南(CHM)

    4. **异常处理**:在VC++中,异常处理是程序错误恢复和处理的重要机制,通过try、catch和throw关键字进行操作。 5. **内存管理**:包括动态内存分配与释放(new和delete)、智能指针的使用,以及内存泄漏的预防。 ...

    EasyHook 2.7 c#非常简单的HOOK处理类库

    5. **广泛兼容性**:支持多种Windows操作系统,包括Windows XP到Windows 10,同时兼容32位和64位系统。 **压缩包文件内容解析** - **build-package.bat**:这是一个批处理文件,用于构建EasyHook的安装包,包含...

    MFC六大关键技术之(五)(六)——消息映射与命令传递

    - **消息分发**: 当窗口接收到消息时,MFC会自动遍历消息映射表,查找匹配的消息处理函数,并调用它来处理该消息。 #### 示例代码解析 假设我们需要创建一个简单的MFC应用程序,包含一个菜单项,当用户点击该菜单...

    滴水逆向培训高级班

    │ 015 陷阱门.mp4 │ 017 任务段_下.mp4, |/ M# A: K3 T7 i* Q/ ? I& o& D; p │ 018 任务门.mp46 m. D+ f4 _/ V) ~9 S& B │ 019 10-10-12分页.mp4 │ 020 PDE_PTE.mp4 │ 021 PDE_PTE属性(P_RW).mp43 ~/ ]1 x5 ...

    c语言课设——黄金矿工上.zip

    EasyX是一个面向初学者的C语言图形库,它简化了在Windows平台上进行图形编程的过程,使得开发者能够更容易地绘制图形、处理键盘和鼠标事件。 【描述】: 项目的主要内容包括实现游戏逻辑、图形界面以及多线程处理。...

Global site tag (gtag.js) - Google Analytics