Windows程序设计(1)——Win32运行原理(一)
1 CPU保护模式与Windows系统
80386的CPU有3种工作模式:实模式、保护模式、和虚拟86模式。其中实模式和虚拟86模式是为了兼容8086CPU而设置的。保护模式是其主要的工作模式。Windows操作系统就运行在保护模式,而保护主要指的就是对存储器(内存和寄存器)的保护,意味着对存储器的读写是受限制的。
1.1 Windows多任务
80386在两个方面对多任务系统提供了支持:一是在硬件上为任务的切换提供良好条件,二是实现了多任务隔离。
在同一时间系统中会有多个活动的进程。每个进程都被给予它自己的私有地址空间。进程内的线程运行时,该线程仅仅能够访问属于它的进程内存空间。在不同的进程中可以有存放在相同地址的数据结构,但它们彼此没有关联,因为它们在各自的地址空间中。
这里所说的进程就是正在运行的应用程序的实例。而占用CPU时间片执行指令的是线程。
1.2 虚拟内存
在保护模式下,CPU寻址范围是0x00000000~0xFFFFFFFF(232, 4GB)。Windows会为每个进程分配4GB的地址空间,也就是虚拟内存。主要依靠CPU的支持,可以将磁盘空间当作内存空间来使用。在磁盘上应用于这一机制的文件称为页文件(paging file)。
在大多数的操作系统上,Windows将些空间的一半(4GB的前半部分, 0x00000000~0x7FFFFFFF)留给进程作为私有存储。另一半(0x80000000~0xFFFFFFFF)来存储操作系统内部的数据。
1.3 处理器的特权级别
处理器定义了4种(0~3)特权级别。Windows使用了0和3两个特权级别,对应于内核模式和用户模式。用户程序在用户模式下运行,系统程序在内核模式下运行。
当应用程序调用一个系统函数的时候,用户的应用程序会从用户模式切换到内核模式去执行。虚拟内存中的每一页的页属性都有访问模式的标识,标识哪一个模式下的代码才有权限去访问该页,这样就很好的区分了不同模式下的访问权限。
一般来说,研究WDM(Windows Driver Model)设备驱动的书讨论的是内核模式下的Windows程序设计,而SDK程序设计主要指的是用户模式下的程序设计。
2 内核对象
内核对象是系统提供的用户模式下与内核模式下代码进行交互的基本接口。经常需要创建、撕开和操作内核对象。
2.1 内核对象有什么用
为了管理应用程序,系统有必要维护一些不允许应用程序直接访问的数据。一个内核对象是一块内核分配的内存,它只能被运行在内核模式下的代码访问。内核对象记录的数据在整个系统中只有一份,所以它们也称为系统资源。
对于每一个内核对象,Windows都提供了在其上操作的API函数,这些API函数使应用程序有机会读或者写系统数据,但这一切都是在系统监视下进行的。
内核对象与普通的数据结构间最大的区别就是其内部数据结构是隐藏的,必须调用一个对象服务才能从些对象中得到数据,或者修改数据。因此,内核对象可以完成下面4个任务:
- 为系统资源提供可识别的名字。
- 在进程之间共享资源和数据。
- 保护资源不会被未经认可的代码访问。
- 跟踪对象的引用情况。使得系统知道什么时候一个对象不再被使用了, 以回收资源。
2.2 对象句柄
内核对象的数据结构仅能从内核模式访问,应用程序必须使用API函数才能访问内核对象。调用函数创建内核对象时,函数会返回标识此内核对象的句柄。可以将句柄认为是一个能被进程中所有线程使用的一个不透明的值,许多API函数需要使用它们作为参数,以便系统知道要操作哪一个内核对象。
一般来讲,句柄是进程相关的。但使用DuplicateHandle
函数可以复制进程句柄,实现多个进程共享一个内核对象。
2.3 使用计数
内核对象是进程内的资源,使用计数属性指明进程对特定内核对象的引用次数,当系统发现引用次数是0时,它就会关闭资源。
Windows程序设计(1)——Win32运行原理(一)的更多相关文章
- Windows程序设计(1)——Win32运行原理(二)
创建进程 1 进程和线程 2 应用程序的启动过程 3 CreateProcess函数 4 实例 3 创建进程 3.1 进程和线程 进程通常被定义为一个存在运行的程序的实例.进程是一个正在运行的程序,它 ...
- Windows程序设计(1)——Win32运行原理(三)
进程控制 1 获得系统进程 2 终止当前进程 3 终止其他进程 4 进程控制 4.1 获得系统进程 使用toolhelp模块可以实现获取系统中当前运行当中的进程列表. 思路如下,使用CreateToo ...
- 第二章--Win32程序运行原理 (部分概念及代码讲解)
学习<Windows程序设计>记录 概念贴士: 1. 每个进程都有赋予它自己的私有地址空间.当进程内的线程运行时,该线程仅仅能够访问属于它的进程的内存,而属于其他进程的内存被屏蔽了起来,不 ...
- C++学习笔记1(Windows程序运行原理及程序编写流程)
窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与Lessonecl调用规范的比较,初学者常犯错误及注意事项.以下是应用程序与操作 ...
- 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程
详解游戏辅助编程 [目录] 1-什么是Windows API 2-Windows进程 3-Windows 的内存的运行原理 4-windows 中句柄的概念 5-Windows的变量类型 6-辅助实现 ...
- Windows程序设计(0)——编程之前
Windows程序设计之前 1 做什么 2 解决什么问题 3 有哪些资源 在开始真正的编程之前,需要了解要做的事情是什么,要解决的解决的问题是什么,有哪些资源可以使用. 1 Windows程序设计之前 ...
- Windows 程序设计
一.Win32 API /******************************************************************** created: 2014/04/1 ...
- Shell基础快速入门 了解shell运行原理
Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界 ...
- Windows程序设计(2) -API-01 初识
Windows 程序原理 一,CPU的保护模式和windows操作系统 [x] windows 是多任务实现 [x] 虚拟内存和 各个进程的地址空间安排:2G系统空间,2G用户空间,2G用户空间是各个 ...
随机推荐
- ML | SVM
What's xxx An SVM model is a representation of the examples as points in space, mapped so that the e ...
- luogu P2056 采花
题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 1-c 表示) ,且花是排成 ...
- 转载cookie理解
本文转自https://www.cnblogs.com/dojo-lzz/p/5580301.html 服务器端像客户端发送Cookie是通过HTTP响应报文实现的,在Set-Cookie中设置需要像 ...
- Java代理学习笔记
代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...
- 判断用户Input输入的事件来进行登陆
我们是通过键盘按的object.keyCode获取的 Html <input onkeydown="keydownMsg(event)" type="text&qu ...
- PHP_EOL是什么意思?
PHP_EOL 代表php的换行符, 这个变量会根据平台而变, 在windows下会是/r/n, 在linux下是/n, 在mac下是/r 文章来源:刘俊涛的博客 地址:h ...
- Solaris服务管理
远程登录协议 telnet \ssh 等.当然我们可以查看谁登录过我的系统,以及可以利用ftp记录日志. 一.SMF: 服务管理工具 优点:自动恢复意外终止的服务,支持服务的依赖关系,一个服务可以有多 ...
- SpringMVC:JSON
@ResponseBody params="json":访问我这个方法的时候一定要有参数名为json 返回值Userjackson-all-1.9.0.jar @RequestMa ...
- HAProxy简单使用
一.HAProxy简介及定位 HAProxy 是一款基于TCP和HTTP应用的具备高可用行且负载均衡的代理软件.HAProxy是完全免费的,借助HAProxy可以快速.可靠地提供基于T ...
- Python+Selenium框架设计--- Page Object Model
POM(Page Object Model):页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想.采用POM的目的,是为了解决前端中UI变 ...