Windows内核原理系列01 - 基本概念
1.Windows API
Windows 应用编程接口(API)是针对WIndwos操作系统用户模式的系统编程接口,包含在WindwosSDK中。
2.关于.NET
.NET由一个被称为FCL的类库和一个被称为CLR的公共语言运行库组成。FCL是建立在CLR之上的,而CLR是一组标准的COM服务器,提供了垃圾回收,即时编译类型检验等特性。由于CLR的这些特性,使得开发人员的生产效率得以提高。.NET框架与组建的关系如下:
.NET应用程序
用户模式(托管代码) ——————————
类库(FCL)
CLR(COM服务器)
用户模式(非托管代码) ——————————
Windows API DLL
内核模式 Windows内核
3.服务、函数和例程
服务在Windows上有多种含义:
1.Windwos API :特指Windows子系统中的API,包含在user32.dll,gdi.dll,advapi.dll,kerenalbase.dll中
2.原生的系统服务 :工作在任何子系统之下,由操作体统提供的系统调用,包含在ntdll中,是内核的唯一入口点, Windwos API是靠调用这些API实现的,是这些API在WIndwos子系统上的的封装。
3.内核支持函数 :只能在内核模式下调用的例程
4.Window服务,由Windows服务管理器启动的进程
5. DLL:一组可调用的例程
4.进程
进程是一个容器,包含了程序实例执行时包含的各种资源:
1.私有虚拟地址空间
可以采用共享内存或者ReadProcessMemory突破这一限制。
进程使用VAD来管理虚拟地址空间,内部使用AVL树。
2.可执行程序以及相关的DLL
3.已经打开的句柄表:指向各种系统资源:文件,信号量等
4.访问令牌:标识了与该进程关联的用户,安全组,特权,UAC虚拟化状态,会话,有限的用户状态
5.进程ID(与线程ID共享一个空间,不会重)
6.至少一个可执行的线程
7.一个父进程(有可能已经不存在,这时在一般工具中可以显示为无父进程)
PS:判断父进程的有效性可以用当前进程的启动时间和父进程ID对应进程的启动时间做比较。
5.线程
线程是进程内部的实体,也是Windows执行此进程的调度实体。线程包括以下一些组件:
1.一组处理器状态和CPU寄存器(称为线程上下文,在切换线程时需要切换这些数据),可以由GetThreadContext获得。
2.两个栈,一个用于内核模式执行,另外一个用于用户模式执行。由于内核模式和用户模式是分离的,内核模式虽然可以访问用户模式的内存,但是为了充分隔离,需要把栈分开。另外一个分开的理由是以前系统调用是依赖int 2e软中断的方式进行的,不是直接call过去的。现在的实现方式是sysenter,也会跳转的一个指定地址,并把当前的用户态栈指针用寄存器ax传递过去。
3.TLS,线程局部存贮,由一个进程内的TLS表和每个线程各自维护的一个TLS表构成,每个表项目维护一个指针。线程中使用索引访问这个表项目,进程的TLS表中保存了索引的占用情况,每个线程中保存了该线程中特定索引对应的值。实现了同一个索引在不同线程中可以获取到不同的值。
4.线程ID
5.令牌(可选),多线程服务器用于模仿客户的安全环境,或者模拟SYSTEM权限...
6.纤程
一种用户态的线程,为了避免内核模式线程切换带来的开销,采用用户态模式调度(UMS),纤程不会自动放弃执行,直到调用SwitchToFiber或者退出。
7.虚拟内存
Windows采用线性地址的虚拟内存系统,使得每个进程拥有一个很大的虚拟内存空间。采用分页机制实现。并利用页面文件或文件映射的方式将不常用的数据写入硬盘以腾出更多的物理内存。
WIndwos采用3GB模式或者地址窗口扩展(AWE)扩展了32位程序的地址空间。AWE允许用户将不同的物理内存映射到自己2G(3G)的用户空间中。
8.内核模式和用户模式
为了保护操作系统本身,操作系统利用处理器的特权级的机制将系统分为用户模式(Ring3)和内核模式(Ring0),Ring0下允许执行特权指令,Ring3到Ring0需要特定的方式进入,并且收到保护。内核模式下所有代码共享一个虚拟地址空间,驱动运行在内核模式下,因此驱动的不稳定会影响到系统的稳定性。在64位的Windows中要求驱动程序强制签名。
9.终端服务及多个会话
终端服务是服务器,用于接受多个会话请求,实现本地或者远程的会话。远程会话可以使用远程桌面创建。
10.对象和句柄
借助于一个对象管理器的内核组件,Windows对对象进行管理,并使用句柄对其进行引用。对象管理器提供以下几种服务:
1.为系统资源提供可读的名称
2.在进程之间共享资源和数据
3.保护资源,避免未授权的访问
4.引用跟踪,不再使用时自动释放对象。
11.安全性
Windows的核心安全功能包括:
1.针对可共享对象的自主包含和强制完整性保护
2.安全审计(针对主体或者发起他们的用户以及发起动作的记录)
3.登录时的认证
4.禁止用户采用访问未初始化资源的方法访问其他用户已经释放的数据
Windows支持3种对象访问控制形式:
1.自主访问控制:由对象的所有者授权或者拒绝他人访问这些对象,当用户登录是会获得一组安全凭证(令牌),当他试图访问对象时,系统会用他的安全凭证(令牌)与对象的访问控制列表(ACL)进行比较。
2.特权访问控制:即使所有者联系不到,也可以访问被保护的对象。(管理员)
3.强制完整性保护:用于同一个账户内部的对象访问。UAC
Windows内核原理系列01 - 基本概念的更多相关文章
- Windows内核原理-同步IO与异步IO
目录 Windows内核原理-同步IO与异步IO 背景 目的 I/O 同步I/O 异步I/O I/O完成通知 总结 参考文档 Windows内核原理-同步IO与异步IO 背景 在前段时间检查异常连接导 ...
- 【转载】深入研究Windows内部原理绝对经典的资料
原文:深入研究Windows内部原理绝对经典的资料 另一篇资料:深入研究Windows内部原理系列 (为了方便大家下,我打包了放在一下地址: 1-6:http://download.csdn.net/ ...
- Windows Kernel Way 1:Windows内核调试技术
掌握Windows内核调试技术是学习与研究Windows内核的基础,调试Windows内核的方式大致分为两种: (1)通过Windbg工具在Windows系统运行之初连接到Windows内核,连接成功 ...
- windows内核安全编程书籍
windows internals 的中文译本 windows内核原理与实现 版权声明:本文为博主原创文章,未经博主允许不得转载.
- Windows原理深入学习系列-Windows内核提权
这是[信安成长计划]的第 22 篇文章 0x00 目录 0x01 介绍 0x02 替换 Token 0x03 编辑 ACL 0x04 修改 Privileges 0x05 参考文章 继续纠正网上文章中 ...
- 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 百篇博客分析OpenHarmony源码 | v62.01
百篇博客系列篇.本篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 51.c.h.o 本篇开始说文件系统,它是内核五大模块之一,甚至有Linux的设计哲学是" ...
- 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 百篇博客分析OpenHarmony源码 | v24.01
百篇博客系列篇.本篇为: v24.xx 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管理内 ...
- [7] Windows内核情景分析---线程同步
基于同步对象的等待.唤醒机制: 一个线程可以等待一个对象或多个对象而进入等待状态(也叫睡眠状态),另一个线程可以触发那个等待对象,唤醒在那个对象上等待的所有线程. 一个线程可以等待一个对象或多个对象, ...
- 2017-2018-1 20179205《Linux内核原理与设计》第八周作业
<Linux内核原理与设计>第八周作业 视频学习及操作分析 预处理.编译.链接和目标文件的格式 可执行程序是怎么来的? 以C语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
随机推荐
- Oracle Hints详解
在向大家详细介绍Oracle Hints之前,首先让大家了解下Oracle Hints是什么,然后全面介绍Oracle Hints,希望对大家有用.基于代价的优化器是很聪明的,在绝大多数情况下它会选择 ...
- VS2010 中 Entity Framework 多数据库并存方法
选中相应数据库生成的 *.edmx文件,然后在属性中找到“自定义工具命名空间”,为每个EF数据集设置不同的命名空间,这样每个数据库生成的代码就会被隔离在不同的命名空间,即使同名类型也就不会相互影响了.
- PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子
因为近期给朋友公司做个门户网站,把荒置了6.7年的PHP又重新拾起,发现PHP这些年兴旺多了,很多新的东西看的不明不白,研究了几个框架ZendFramework.thinkphp.Symfony.yi ...
- Spring以及SPringmvc相关问题: ServletContext -父子容器
总结如下: 明确了Servlet规范中ServletContext的作用和意义.此外明确一个Tomcat中多个web应用,每个人web应用有唯一的一个ServletContext(全局上下文).[例子 ...
- android APK 文件的生成过程
步骤: 1. 用 aapt工具生成R文件aapt package -m -J gen目录 -M AndroidManifest.xml -S res目录 -I 编译版本sdk的android ...
- DHTMLX-Form
DHTMLX-Form dhtmlxForm提供了一个标准形式与一些有用的补充,如不同风格,使用的数据从客户端和服务器端,与其他dhtmlx组件的集成.验证等. 例子 <!DOCTYPE htm ...
- Spark算上下基线
def baseLine(sc: SparkContext): Unit = { println("--------------------baseLine start----------- ...
- Linux使用ssh公钥实现免密码登录Linux
ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例.有机器A(192.168.1.155),B(192.168.1.181).现想A ...
- c# 进程间的通信实现之一简单字符串收发
使用Windows API实现两个进程间(含窗体)的通信在Windows下的两个进程之间通信通常有多种实现方式,在.NET中,有如命名管道.消息队列.共享内存等实现方式,这篇文章要讲的是使用Wi ...
- 常用SQL语句
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...