[笔记]深入解析Windows操作系统《一》概念和工具
文章目录
- 前言
- 1.1 Windows操作系统的版本
- 1.2 基础概念和术语
- Windows API
- 关于 .Net
- Win32 API 历史
- 服务、函数、例程
- 进程、线程和作业
- 进程
- tlist /t 查看进程树
- 任务管理查看进程
- Process Explorer查看进程的细节
- 线程
- 纤程与用户模式调度器线程
- 虚拟内存
- 内核模式和用户模式
- 终端服务及多个会话
- 概念
- 远程桌面连接和快速用户切换
- 内核对象及句柄
- 安全性
- 注册表
- Unicode
- 1.3 挖掘Windows内部机理
- 性能监视器
- 内核调试
- windows调试工具
- liveKd工具
- Windows软件开发工具(Windows SDK)
- Windows驱动程序开发工具(Windows Driver Kit)
- Sysinternals工具
- 总结
前言
本章将介绍Microsoft Windows操作系统的关键概念和术语,比如:
- Windows API、
- 进程、
- 线程、
- 虚拟内存、
- 内核模式和用户模式、
- 对象、
- 句柄、
- 安全性
- 注册表等。
这些概念和术语将贯穿全书。
同时也会介绍一些可用来探查Windows内部的工具,比如:
- 内核调试器
- 性能监视器,
- 以及来自Windows Sysinternals 的一些关键工具。
此外,还将说明如何以WDK (Windows Driver Kit)
和SDK (Platform Software Development Kit)
作为资源,来找到关于Windows内部机理的进一步信息。
请一定要理解本章中讲述的所有内容,本书其余章节将以此为基础。
1.1 Windows操作系统的版本
产品名称 | 内部版本号 | 发布日期 |
---|---|---|
Windows NT 3.1 | 3.1 | 1993.7 |
Windows NT 3.5 | 3.5 | 1994.9 |
Windows NT 3.51 | 3.51 | 1995.5 |
Windows NT 4.0 | 4.0 | 1996.7 |
Windows 2000 | 5.0 | 1999.7 |
Windows XP | 5.1 | 2001.12 |
Windows Server 2003 | 5.2 | 2003.3 |
Windows Vista | 6.0 | 2007.1 |
Windows Server 2008 | 6.0 | 2008.3 |
Windows 7 | 6.1 (编译版本7600) | 2009.10 |
Windows Server 2008 R2 | 6.1(编译版本7600) | 2009.10 |
注“Windows 7”这一产品名称中的“7”并非指内部版本号,而是Windows家族的世代编号。实际上,为了使应用兼容性问题尽可能小,Windows 7的版本号其实是6.1,如表1.1所示。这使得那些检查大版本号的应用程序在Windows 7上可以像在Windows Vista上那样继续执行。事实上,Windows 7和Server 2008 R2有同样的版本号和编译版本,因为它们是从同样的Windows代码基编译而来。
1.2 基础概念和术语
Windows API
Windows应用编程接口(API)是针对Windows操作系统家族的用户模式系统编程接口。在64位版本的Windows推广以前,32位版本Windows操作系统的编程接口被称为Win32 API
,以区别于原来的16位版本Windows的编程接口,即16位WindowsAPI。
术语WindowsAPI兼指Windows的32位和64位编程接口。
Windows API 常用的又分为几个大类:
- 基本服务
- 组件服务司
- 用户界面服务
- 图形和多媒体服务
- 消息和协作
- 网络
- Web服务
关于 .Net
Microsoft.NET框架组成:
- 框架类库(FCL,Framework Class Library)的类库
- 提供了托管代码执行环境的公共语言运行库(CLR,Common Language Runtime)
托管代码执行环境包含一些特性:
- 即时编译
- 类型检验
- 垃圾回收 GCC
- 代码访问安全性等。
由于CLR具有这些特性,因此它所提供的开发环境能够提高开发人员的生产效率,减少常见的编程错误。
.NET框架的组件之间的关系
Win32 API 历史
第一次使用:microsoft Windows 3.0
起因:成为Windows NT启动之初,替代32位 OS/2 Presentation Manager API.
服务、函数、例程
windows 特定的术语的含义:
Windows API函数
指Windows API中已被文档化的、可被调用的子例程。
例如CreateProcess、CreateFile和GetMessage。原生的系统服务(或者系统调用)
指操作系统中未文档化的、可在用户模式下调用的底层服务。
例如,NtCreateUserProcess是一个内部系统服务,Windows的CreateProcessi函数调用该服务来创建新的进程。有关系统调用的定义,参见第3章“系统机制”的“系统服务分发”一节。内核支持函数(或例程)
指位于Windows:操作系统内部且只能在内核模式下调用的子例程(关于内核模式,本章后文将给出定义)。
例如,ExAllocatePoolWith Tag就是个这样的例程,设备驱动程序调用该例程可以向Windows系统堆(称为内存池)申请内存。Windows服务
指由Windows服务控制管理器启动的进程。
例如,Task Scheduler服务运行在用户模式进程中,它支持at命令(类似于UNIX命令at或cron)。(注意,虽然注册表将Windows设备驱动程序定义为“服务”,但是,在本书中不这样使用。)DLL(动态链接库)
指一组可调用的子例程,合起来被链接成一个二进制文件,使用这些子例程的应用程序可以动态地加载此二进制文件。
例如Msvcrt.dll(C运行库)和Kernel32.dl(一个Windows API子系统库)。Windowsl的用户模式组件和应用程序大量使用了DLL.
DLL比静态库的优势在于,应用程序可以共享DLL,Windows保证在内存中只有一份DLL代码,供所有引用该DLL的应用程序共享。注意,非可执行的NET程序集也被编译成DLL,但是,它们没有导出任何子例程,而是由CLR解析出编译的元数据,以便访问对应的数据类型和成员。
进程、线程和作业
进程
程序是指一个静态的指令序列,
进程是一个容器,其中包含了执行程序的特定实例时所用到的各种资源。
Windows进程是由以下元素构成的:
私有的虚拟地址空间
,这是指该进程可以使用的一组虚拟内存地址。可执行的程序
,它定义了初始的代码和数据,并且被映射到该进程的虚拟地址空间中已打开句柄的列表,这些句柄指向各种系统资源,比如信号量、通信端口和文件,该进程内所有的线程都可以访问这些系统资源。被称为访问令牌的安全环境
,它标识了与该进程关联的用户、安全组、特权、UAC
(User Account Control,用户账户控制)虚拟化状态、会话,以及有限的用户账户状态。被称为进程ID的唯一标识符
(在内部,进程ID还是标识符客户ID的一部分)。至少一个执行线程
(尽管“空”进程也是有可能的,但没有用处)。
tlist /t 查看进程树
tlisk.exe 位于 C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\tlisk.exe
任务管理查看进程
Process Explorer查看进程的细节
Process Expore 下载地址
线程
线程是一个进程内部的实体,也是Windows执行此进程时的调度实体。
如果没有线程,进程的程序将不可能运行。
线程包括以下一些最基本的部件:
- 一组代表
处理器状态
的CPU寄存器中的内容。 - 两个栈一一一个用于线程在内核模式下执行时,另一个用于线程在用户模式下执行时。
- 一个被称为
线程局部存储
(TLS,thread-local storage)的私有存储区域,各个子系统、运行库和DLL都会用到该存储区域。 - 一个被称为
线程ID
的唯一标识符(它也是内部结构客户ID〔client ID)的一部分进程D和线程D是从同一个名字空间中产生的,所以它们永远不会重叠)。 - 有时候线程也有它们自己的
安全环境
,或者令牌,多线程服务器应用程序要模仿其客户的安全环境时,常常会使用线程自己的安全环境。
易失的寄存器
、栈
和私有存储区域
合起来被称为线程的环境(context)
。因为这些信息随着Windows所在机器架构的不同而有所不同,所以,此结构必须是与底层架构相关的。
Windows的
GetThreadContexti函数
允许程序访问这一与架构相关的信息(称为CONTEXT块)。
纤程与用户模式调度器线程
出现的原因
:因为将CPU的执行从一个线程切换到另一个线程,将不可避免地涉及内核调度器,所以,这可能是一个开销昂贵的操作,如果两个线程经常频繁地来回切换则尤其如此。
Windows实现了两种机制来降低这一开销:
- 纤程(fiber)
- 用户模式调度(UMS,user-mode scheduling)。
虚拟内存
内核模式和用户模式
终端服务及多个会话
终端服务
:指的是在单个系统中,Windows对于多个可交互用户会话的支持。利用Windows的终端服务,一个远程用户可以在另一台机器上建立一个会话,并且登录进去,在该服务器上运行应用程序。
服务器把图形用户界面(以及其他可配置的资源,比如音频和剪贴板)传送到客户机,客户机把用户的输入传回服务器。
(与X窗口系统类似,Windows允许在一个服务器系统上运行单独的应用程序,其显示部分远程传送到客户机,而非将整个桌面远程到客户机)。
概念
Session0
:第一个会话被认为是服务会话,或者Session0,它包含了宿纳系统的服务的进程。
Session1
: 在机器的物理控制台上的第一个登录会话为一号会话,而其他的会话可以通过远程桌面连接程序(Mstsc…exe)来建立,或者通过使用快速用户切换(后文会介绍)来建立。
远程桌面连接和快速用户切换
Windows的客户机版本允许单个远程用户连接到机器上,但如果有人已经在控制台上登录了,则工作站会被锁住(也就是说,一个人可以用本地方式或远程方式使用Windows?客户机系统,但不能同时以这两种方式来使用该系统)。包括Windows Media Center在内的Windows版本允许一个交互会话和多达四个Windows Media Center Extender会话。
Windows服务器系统支持两个并发的远程连接(这是为了方便远程管理,例如,有些管理工具要求登录到被管理的机器中才可以使用),以及两个以上的远程会话(只需经过适当的授权许可,并且系统被配置为终端服务器)。
所有的Windows客户机版本都支持通过一种被称为快速用户切换(fast user switching)
的特性,在本地创建多个会话。当用户选择断开其会话,而不是注销其登录时(例如,单击“开始”菜单,从“关机”子菜单中选择“切换用户”,或者在按住Windowst键的同时按下L键,然后单击“切换用户”按钮),当前会话(即在该会话中运行的进程,以及描述该会话的所有会话范围的数据结构)仍然保留在系统中,而系统返回到主登录屏幕。如果一个新的用户登录进来,则新建一个会话。
内核对象及句柄
安全性
注册表
Unicode
如果使用了Unicode编码 还会乱码 其实多半因为系统缺少对应语言包导致的。
1.3 挖掘Windows内部机理
主要使用的工具:
工具 | 映像名 | 来源 |
---|---|---|
Startup Programs Viewer | AUTORUNS | Sysinternals |
Access Check | ACCESSCHK | Sysinternals |
Dependency Walker | DEPENDS | www.dependencywalker.com |
Global Flags | GFLAGS Windows | 调试工具 |
Handle Viewer | HANDLE | Sysinternals |
Kernel debuggers | WINDBG,KD | Windows调试工具,Windows SDK |
Object Viewer | WINOBJ | Sysinternals |
性能监视器(Performance Monitor) | PERFMON.MSC | Windows内置工具 |
Pool Monitor | POOLMON | Windows Driver Kit |
Process Explorer 下载地址 | PROCEXP | Sysinternals |
Process Monitor | PROCMON | Sysinternals |
Task(Process)List | TLIST | Windows调试工具 |
任务管理器(Task Manager) | TASKMGR | Windows内置工具 |
DebugView 下载地址 | Sysinternals |
性能监视器
内核调试
windows调试工具
liveKd工具
Windows软件开发工具(Windows SDK)
Windows驱动程序开发工具(Windows Driver Kit)
Sysinternals工具
总结
[笔记]深入解析Windows操作系统《一》概念和工具相关推荐
- [笔记]深入解析Windows操作系统《三》系统机制
文章目录 前言 第三章 系统机制 3.1 陷阱分发 实验:将系统调用号映射到函数和参数 实验:查看系统服务的行为 选择"System"对象,再选择"System Call ...
- 《深入解析Windows操作系统》笔记第1章
在看第一章,做了几个实验,书上的东西我就不copy了 实验1 查看进程树 用tlist工具(在Windows调试工具箱中) 在命令行下打开tlist工具 E:\Program Files\Debugg ...
- 《深入解析Windows操作系统》之系统机制
内容总结: 重难点笔记: 陷阱分发: 中断和异常是导致处理器转向正常控制流之外代码的两种操作系统条件.硬件或者软件都可以检测到这两种条件.术语陷阱(trap)指的是这样一种机制,当异常或者中断发生时, ...
- 《深入解析Windows操作系统》安全性
内容总结: 安全系统组件 以下是实现 Windows安全性的核心组件和数据库. 1. 安全引用监视器(SRM) 2. 本地安全权威子系统(LSASS) 3. LSASS策略数据库 4. 安全账户管理器 ...
- 六年前开始的等待——写在潘爱民译《深入解析Windows 操作系统,第4版》出版之际
按: 这是我给潘爱民老师翻译的<深入解析Windows 操作系统,第4版>一书写的出版人感言.这本书很厚,将近1000页,潘老师用了一年半的时间翻译并反复修订.润色,编辑们用了数月的时间排 ...
- 深入解析Windows操作系统笔记——CH1概念和术语
1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具... 1 1.1操作系统版本... 1 1.2基础概念和术语... 2 1.2.1Windows API2 1.2. ...
- 深入解析Windows操作系统(Windows Internals) 4th Edition 读书笔记 - 第一章 概念和工具(二)
1.2 基础概念和术语(续) 内核模式和用户模式 l 内核模式和用户模式是处理器的概念,而不是操作系统的概念. l 用户代码运行在用户模式下,操作系统代码运行在内核 ...
- 深入解析Windows操作系统之总体架构
(一)需求和设计目标 Windows NT设计小组在项目开始之初选择了下面的设计目标: (1)扩展性:编写的系统代码必须能够随着市场需求的变化而自如增长和改变. (2)可移植性:系统必须能运行在多种硬 ...
- 深入解析WINDOWS操作系统 1
内容简介 本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及内 ...
- 《深入解析Windows操作系统》--第一章 概念和工具
这一章似乎本来不用怎么说的,没什么大不了的东西,还是微软出书的一贯风格,先做一番广告而已.但是作为开篇第一章,也起到了给全书定基调的作用,所以还是说说吧. 1.1Windows ...
最新文章
- Hibernate学习之一对多关联
- 各种类型Android源代码
- JDK的OutputStream为什么方法write(int b)的入参类型是int呢?
- 1002 写出这个数 (20分)
- springContext
- 调色师必须了解的LUT知识
- javascript div 弹出可拖动窗口
- 奥维中如何关闭gcj02坐标_QGIS入门知识:啥是坐标系
- 关于Mybatis的一些问题
- centos 计算器_在Linux命令行中使用计算器的5个命令
- php匹配车牌号,分享一个非常全的php正则验证车牌格式的函数
- dBm和dB(纯计数单位)
- 俞军:百度首席产品架构师
- 高项47个过程及输入、输出、工具解释
- CA、公钥、私钥的基本概念
- Linux服务器下载日志到本地
- 自制CPU(三)流水线
- 【2021环信IM快速集成指南】PC Web、Uni-App、小程序集成都在这里了
- table中cellspacing和cellspadding的用法
- 教大家如何方便地用百度代理装国外ovi store里的软件--页面不会跳来跳去
热门文章
- C语言编译器之四,Turbo C等
- 计算机中汉字字库分为哪两种,常用的汉字字库有GB2312字库和GBK字库两种。 (转)...
- SpringBoot整合Mybatis详细教程
- mac 安装 SwitchHosts,链接都不好使了
- 如何使用fiddler 4进行手机模拟器抓包详细教程
- fiddler4安装及使用手机抓包
- pscad调用matlab的模块,PSCAD模块库功能教程(包含与matlab接口).pdf
- matlab2014b下载 32位,matlab 2014b 32位
- java贪吃蛇详细设计,javascript贪吃蛇游戏设计与实现
- 盘点python工具包并优化pip下载加速