参考资料:

  1. 《Windows Internals》

  2. Dependency Walker

  3. Ntoskrnl.exe

  4. Livekd的使用

  5. WinDbg的使用(一)

  6. WinDbg的使用(二)

  Now, let's delve into the internal structure & the role each key OS component plays at the high-level achitecture. ^-^

  知识点:

  ● 先上图,下图是windows系统结构。

  

                            图1 Windows系统结构

  ● 环境子系统将基础Windows执行系统的服务的某些子集暴露给应用程序。每个子系统都提供对不同本地服务子集的访问(子系统的功能不尽相同)。每一个可执行镜像文件(.exe文件)都会绑定到一个且仅一个子系统。另外,用户程序是通过子系统来间接调用Windows系统服务的,而不是直接调用。可以使用Dependency Walker查看镜像的子系统类型。

  

          图2 使用DW查看镜像子系统类型

   ● 环境子系统将由Session Manager(smss.exe)启动。子系统启动信息存储在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems中。

  ● Ntdll.dll是一个主要为了支持使用子系统DLL的特殊系统支持库。它包含两类函数:①到Windows执行系统服务的系统服务派发存根(即提供到Windows执行系统服务的接口供用户模式使用)。②内部支持函数,被子系统、子系统DLLs和其它镜像使用。Ntdll包含的支持函数包括:镜像加载器(以Ldr开头的函数)、堆管理器、Windows子系统进程交互函数(以Csr开头的函数)、通用运行时库例程(以Rtl开头的函数)、支持用户模式调试的函数(以DbgUi开头)、Windows时间追踪(以Etw开头)以及用户模式下的APC和异常 dispatcher。最后,它还包含C Run-Time(CRT)例程(限制memcpy、strcpy、itoa等部分例程,主要跟C语言相关)。

  ● Windows执行程序是Ntoskrnl.exe的上层。Ntoskrnl.exe即内核镜像,是Windows系统的基础部分,提供Windows NT内核空间的内核和执行程序层(接口),对诸如硬件抽象 & 进程和内存管理负责。它包含Cache管理器、执行程序、内核、安全引用监视、内存管理器和调度器。

  ● Kernel由一组提供基础机制(如线程调度和同步服务)的函数组成,这些函数被执行程序组件使用和对依赖硬件架构的底层提供支持(interrupt&exception dispatching)。内核代码主要由C写的,而汇编代码将负责访问特殊处理器指令和寄存器。

  ● Kernel提供良好定义的且可预测的系统原子操作和机制的底层基础,以供高层执行程序的组件使用。Kernel将它自己与剩余的执行程序通过实现操作系统机制和避免决策进行隔离。除了线程调度和派发由Kernel实现外,其余所有决策都由执行程序决定。

  ● Kernel之外,执行程序将线程和其它可共享资源都表示为对象(objects)。这些对象需要加一些决策(或策略)在头部,而这些头部信息会在Kernel中被省略,且这些对象会被称为内核对象(kernel objects)。内核对象中,有一部分对象被称为控制对象(control objects),用于建立控制不同操作系统函数的语义学。包括:APC对象、DPC(deferred procedure call)对象以及一些I/O管理器使用的对象(如,中断对象)。而另一部分对象则被称为派发对象(dispatcher objects),包含改变和影响线程调度的同步能力。包括:kernel thread、mutex、event、kernel event pair、semaphore、timer和可等待timer。执行程序使用内核函数创建内核对象的实例,然后操作它们,甚至组件更复杂的对象以供用户模式下使用。

  ● Kernel使用的数据结构叫做内核处理器控制区KPCR(kernel processor control region),用来存储特定处理器数据。KPCR包含诸如IDT、TSS和GDT的基本信息,同时也包含中断控制器的状态。为方便对KPCR的访问,内核存储了一个指向它的指针在FS寄存器中(32-bit)或GS寄存器中(x64),而在IA64中它则存于0xE000 0000 FFFF 0000中。另外,在KPCR中包含了一个叫做内核处理器控制块KPRCB(kernel processor control block)的嵌入式数据结构,且该结构是一个只在内核模式下和在Ntoskrnl.exe中使用的私有结构。它包含了调度信息(比如:当前、下一个和空闲线程供处理器调度执行)、处理器的派发器数据库、DPC队列、CPU供应商和标识符信息、CPU和NUMA拓扑结构、Cache的大小、时间计数信息和处理器统计数据等等。KPRCB有时会被用于存储cache-aligned & per-processor结构,以供内存优化访问(特别是在NUMA系统中)。最后,可以通过!pcr!prcb命令查看它们的内容。

  ● Kernel使另外一个重要的任务就是抽象或隔离执行程序&设备驱动与在Windows支持的硬件体系结构的变动(即使执行程序&设备驱动与硬件无关)。

  ● HAL(Hardware Abstraction Layer)是一个可加载的内核态模块(Hal.dll),向Windows所运行的硬件平台提供低级接口。HAL的routines可在WDK的文档中找到。

  ● Device Drivers是可加载的内核模块(通常以.sys结尾),它们担任着I/O管理器和相关硬件之间接口的作用,通常是用C或C++书写的,通过调用HAL提供的接口与硬件进行交互。WDF(Windows Driver Foundation)提供了KMDF(Kernel-Mode Driver Framework)和UMDF(User-Mode Driver Framework)以简化了Windows驱动的开发。前者支持Win 2000SP4及后来者,后者支持Win XP及后来者。

Windows Internals学习笔记(六)Windows关键系统组件的更多相关文章

  1. Windows Internals学习笔记(二)系统架构

    参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...

  2. Windows Internals学习笔记(八)IO系统

    参考资料: 1. <Windows Internals> 知识点: ● 当一个进

  3. Windows Internals学习笔记(七)Image Loader

    参考资料: 1. <Windows Internals> 2. Fibers 知识点: ● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务.然而, ...

  4. Windows Internals学习笔记(四)Trap Dispatching

    参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...

  5. Windows Internals学习笔记(一)概念与工具

    参考资料: 1. <Windows Internals> 2. Windows Drive Kit 3. Microsoft Windows SDK 4. WDK下载地址 知识点: 1. ...

  6. Windows Internals学习笔记(五)Synchronization

    参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...

  7. Windows Internals学习笔记(三)Procdump的使用

    参考资料: 1. 下载地址 2. 使用示例

  8. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  9. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

随机推荐

  1. 一道打印M的面试题

    public class Demo { /** * 平面图形题(二维数组) */ public static void main(String[] args) { int num = 25; int ...

  2. php实现实现代码多主从,切换,轮询,健康检查

    现在很多框架现在都提供数据库读写分离,比如CI,TP,YII,一般使用正则表达书判断sql语句是读操作,还是写操作,但是有个缺点,没有给用主动判断,比如写入操作必须去立即读取主数据库的,如果不能立即判 ...

  3. PHP读文件的一个乱码问题

    D:/3.txt是utf-8文件 $f1 = fopen('D:/3.txt','r');$str = fread($f1,10000);fclose($f1);echo substr($str,1, ...

  4. Flink - RocksDBStateBackend

    如果要考虑易用性和效率,使用rocksDB来替代普通内存的kv是有必要的 有了rocksdb,可以range查询,可以支持columnfamily,可以各种压缩 但是rocksdb本身是一个库,是跑在 ...

  5. 【转】NGUI研究院之自适应屏幕(十)

    http://www.xuanyusong.com/archives/2536 现在用unity做项目 90%都是用NGUI,并且我个人觉得NGUI应该算是比较成熟的UI插件,虽然他也存在很多问题,但 ...

  6. react-native win7环境搭建

    时间:2016-08-22 晚,西安 1.安装jdk java version "1.6.0_45"Java(TM) SE Runtime Environment (build 1 ...

  7. 孟加拉央行SWIFT攻击事件恶意木马分析(转)

    第一章 分析概述 该恶意木马样本为运行于winodws平台上的PE文件(名称:evtdiag.exe).文件大小为64KB,编译时间是2016年2月5日. 经分析,该样本为定制的攻击SWIFT客户端程 ...

  8. C# jquery webservices 跨域调用的问题解决方案

    前台代码: <script src="js/jquery-1.9.1.min.js" type="text/javascript"></scr ...

  9. Vcenter server 5.5克隆模板(创建ISO镜像)

    1.进入Vcenter server 5.5控制台 --- 选择虚拟机和模版. 2.右键 XP_32 --- 模版 ---- 克隆为模板(Vcenter server 5.5连接的VMware ESX ...

  10. dubbo源码分析2-reference bean发起服务方法调用

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...