从subsystem开始概述NT内核
来源:互联网 发布:unity3d视频播放卡帧 编辑:程序博客网 时间:2024/06/04 01:14
从subsystem开始概述NT内核
什么是subsystem?
NT架构(Windows NT、Windows XP、Windows 2003)的初始设计是很有野心的,它希望在NT上可以不加修改地运行OS2、UNIX程序。
所以在NT中有subsystem的概念,每个subsystem针对一个平台,ntdll.dll是所有subsystem的基础。或者说ntdll.dll统一提供NT系统的API接口,subsystem为各个平台的应用程序提供包装。
在winnt.h中,对subsystem的定义如下:
#define IMAGE_SUBSYSTEM_UNKNOWN 0 // Unknown subsystem.
#define IMAGE_SUBSYSTEM_NATIVE 1 // Image doesn't require a subsystem.
#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 // Image runs in the Windows GUI subsystem.
#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 // Image runs in the Windows character subsystem.
#define IMAGE_SUBSYSTEM_OS2_CUI 5 // image runs in the OS/2 character subsystem.
#define IMAGE_SUBSYSTEM_POSIX_CUI 7 // image runs in the Posix character subsystem.
#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 // image is a native Win9x driver.
#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 // Image runs in the Windows CE subsystem.
CUI就是Console UI了。我们使用的subsystem主要是3和2。
NT架构另一个主要概念就是用户态和核心态了。32位计算机的地址空间中,0x0-0x10000是保留的,然后0x80000000以下属于用户 态,0x80000000以上属于核心态。核心态管理所有硬件。用户态不能使用核心态的任何东西。在核心态运行的程序,例如驱动程序,可以在系统中为所欲 为,当然错误的后果会很严重。
在用户态看起来很底层的东西,例如Win32 subsystem的核心:kernel32.dll、user32.dll、gdi32.dll,基本上只是ntdll.dll的一个包装,而ntdll.dll包装了从用户态到核心态的system call,也称作“Native System Service”。
用户态不能访问核心态的任何函数和变量,所以system call不同于一般的API调用。system call可以被看作:将要调用的功能ID放到eax,然后执行INT 2e。
ntdll.dll通过system call使用核心态的ntoskrnl.exe和win32k.sys提供的功能。ntoskrnl.exe被尊称为“Executive”,可以看作是NT的大脑级模块。win32k.sys提供NT图形库接口的API。
- 从subsystem开始概述NT内核
- 从subsystem开始概述NT内核(转)
- nt内核
- Discuz!NT代码阅读笔记(1)--从HttpModule开始 (转)
- Discuz!NT代码阅读笔记(1)--从HttpModule开始
- 学习C#从俄罗斯方块开始(一)概述
- linux内核学习,从README开始!
- linux内核学习,从README开始!
- 从task_struct开始学习linux内核
- PHP内核探索:从SAPI接口开始
- 从内核开始分析完成端口模型
- 从何处开始阅读linux内核源代码
- PHP内核探索:从SAPI接口开始
- 从start_kernel开始Linux内核启动
- 从0开始运行主线Linux内核
- PHP内核探索:从SAPI接口开始
- Windows NT内核分析
- NT内核代码分析
- 基于XFire的灵活的动态的Web服务客户端
- 获取peergroup的所有peers(Getting a list of the peers in a PeerGroup)
- 编程概述
- 谈谈Windows程序中的字符编码
- CDSN上的一篇谈微软技术的帖子
- 从subsystem开始概述NT内核
- 眼见为实(1):C++基本概念在编译器中的实现
- 编程实践
- 介绍Windows的窗口、消息、子类化和超类化
- 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- 时标和历法
- 浅谈文字编码和Unicode(上)
- 浅谈文字编码和Unicode(下)
- 官方论坛的高手