Microsoft windows internals 学习笔记(1)
2008-04-09 21:48
387 查看
陷阱分发: 陷阱(trap)指的是异常或中断发生时处理器扑捉到一个执行线程,并将控制权转移到操作系统某一固定地址处。windows中控制权转移给一个 陷阱处理器(trap handler),与某个异常或中断相关联的函数。 中断:是一个异步事件,可以在任何时候发生,与处理器当前执行的任务无关, 异常:同步条件,一个特殊指令执行结过。 如果中断的线程是在用户模式下运行,windows就切换该线程到内核模式栈,wondows在被中断的线程的内核栈上创建一个陷阱帧(trap frame ),并把线程的执行状态保存到陷阱帧里。 陷阱帧是一个线程完整指行环境的一个子集,调试中输入 dt nt!_ktrap_frame 可以看出结构定义: 如下: nt!_KTRAP_FRAME +0x000 DbgEbp : Uint4B +0x004 DbgEip : Uint4B +0x008 DbgArgMark : Uint4B +0x00c DbgArgPointer : Uint4B +0x010 TempSegCs : Uint4B +0x014 TempEsp : Uint4B +0x018 Dr0 : Uint4B ;几个调试寄存器 +0x01c Dr1 : Uint4B +0x020 Dr2 : Uint4B +0x024 Dr3 : Uint4B +0x028 Dr6 : Uint4B +0x02c Dr7 : Uint4B +0x030 SegGs : Uint4B +0x034 SegEs : Uint4B +0x038 SegDs : Uint4B +0x03c Edx : Uint4B +0x040 Ecx : Uint4B +0x044 Eax : Uint4B +0x048 PreviousPreviousMode : Uint4B +0x04c ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD ;指向异常链表 +0x050 SegFs : Uint4B +0x054 Edi : Uint4B +0x058 Esi : Uint4B +0x05c Ebx : Uint4B +0x060 Ebp : Uint4B +0x064 ErrCode : Uint4B +0x068 Eip : Uint4B +0x06c SegCs : Uint4B +0x070 EFlags : Uint4B +0x074 HardwareEsp : Uint4B +0x078 HardwareSegSs : Uint4B +0x07c V86Es : Uint4B +0x080 V86Ds : Uint4B +0x084 V86Fs : Uint4B +0x088 V86Gs : Uint4B 保存各寄存器状态。 在系统引导的时候,windows会填充IDT(interrupt descript table),其中包含了指向内核中负责处理每个中断和异常的例程指针。 利用!idt可以看到IDT的内容。 lkd> !idt Dumping IDT: 37: 806e4864 3d: 806e5e2c 41: 806e5c88 50: 806e493c 62: 89c97954 ba6105e0 (KINTERRUPT 89c97918) 63: 8970b044 ba59ce80 (KINTERRUPT 8970b008) b82bfbca (KINTERRUPT 896f6bb0) 73: 89a7cbec b82deb78 (KINTERRUPT 89a7cbb0) b82bfbca (KINTERRUPT 896febb0) b82bfbca (KINTERRUPT 896f7bb0) 82: 89cba954 ba6105e0 (KINTERRUPT 89cba918) 83: 89c86afc ba6105e0 (KINTERRUPT 89c86ac0) ba6105e0 (KINTERRUPT 89cb2bb0) 92: 896f8634 ba958a30 (KINTERRUPT 896f85f8) 93: 89c3176c ba968495 (KINTERRUPT 89c31730) a3: 89c95bec ba96fd80 (KINTERRUPT 89c95bb0) a4: 89702044 b82bfbca (KINTERRUPT 89702008) b82bfbca (KINTERRUPT 896f8bb0) b1: 89ce32cc ba68431e (KINTERRUPT 89ce3290) ba6a9da8 (KINTERRUPT 896f8008) b4: 89709bec b82bfbca (KINTERRUPT 89709bb0) b825fbd8 (KINTERRUPT 896f0bb0) c1: 806e4ac0 d1: 806e3e54 e1: 806e5048 e3: 806e4dac fd: 806e55a8 显示中断号,及中断ISR(interrupt server routine)地址。 |
相关文章推荐
- Microsoft windows internals 学习笔记(4)
- Microsoft windows internals 学习笔记(2)
- Microsoft windows internals 学习笔记(3)
- Mcad学习笔记之Microsoft Windows服务
- Windows Internals 学习笔记(一)
- Dynamic CRM 2015学习笔记(6)没有足够的权限 - 您没有访问这些记录的权限。请联系 Microsoft Dynamics CRM 管理员
- cocos2dx学习笔记一:windows下创建工程方法和运行项目方法
- Microsoft.Practices.Unity学习笔记
- NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7
- node.js在windows下的学习笔记(3)---npm
- 在Microsoft Windows中使用Apache(学习中……)
- 【theano-windows】学习笔记七——logistic回归
- Windows 8 Directx 开发学习笔记(十二)利用混合实现浮在水面的木箱
- cocos2d-x学习笔记(18)--游戏打包(windows平台)
- Windows学习笔记10——图形基础<二>
- 【theano-windows】学习笔记十七——梯度中的consider_constant
- 【theano-windows】学习笔记十三——去噪自编码器
- Windows 程序设计学习笔记(一)
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- 函数参数Windows程序设计_Chap01_起步_学习笔记