win32学习笔记(一)


前言

最近在学习win32的API编程,参考书籍为《Windows程序设计》第三版,作者 张铮、孙宝山、周天立。之前学习了一些c++,却对程序的底层原理知之甚少,因此鼓起勇气开始啃这本书。虽然现在实际使用win32编程的地方并不多,但是我希望能在学习各类API的过程中了解更多关于操作系统的知识。我个人认为这和汇编一样属于基本功,能够扩展视野,加深对程序的理解。

不着急去学习一些框架和工具,静下心来或许才能走得更远。虽然不是计算机专业的,基础也要打牢!

这个系列的文章将主要是作为我的学习笔记。前置的知识主要是c/c++的基础内容。在学习过程中为了和书本保持一致,使用vc++6.0和xp系统。

进程与线程

进程通俗来说就是任务,往往被定义为一个正在运行的程序的实例。在SDK文档中的描述如下:“进程是一个正在运行的程序,它拥有自己的虚拟地址空间,拥有自己的代码,数据和其他系统资源,如进程创建的文件、管道、同步对象等。一个进程包含了一个或者多个运行在此进程内的线程”。

而线程则是进程执行代码的独立实体,操作系统创建了一个进程后,会创建一个线程执行进程中的代码。通常这个线程就是主线程。主线程在运行过程中可能会创建其他线程。一般将主线程创建的线程称为该进程的辅助线程。

只看定义可能还不是很清楚它们之间的区别。下面是更加具体的描述。

程序是一连串静态的指令,那么进程就是一个容器,它被创建出来包含了该程序运行所需要的资源,并且这些资源独属于这个进程。而线程就是代码的执行者,运行在进程这个容器中,执行其中的代码。所以有人说进程是“不活泼”的。

虚拟内存

80386处理器的保护模式下,所有的32根地址总线都可以寻址,范围是0x00000000~0xFFFFFFFF(4GB).因此,32位Windows系统可寻址4GB的地址空间。

这4GB不完全是依靠RAM,Windows在cpu处于保护模式下时,有一种机制叫做虚拟内存。它可以帮助操作系统将磁盘空间当作内存空间使用。在磁盘上应用于这一机制的文件被成为页文件。

但是这4GB也不都是进程私有的,Windows将前2GB留给进程作为私有数据,而自己使用后2GB来存储操作系统内部的使用的数据。即用户空间和系统空间

80386处理器定义了4种(0~3)特权级别,也叫环。0级是最高级,3级是最低级。虚拟内存中的每一页的页属性中都有访问模式标记,它标识了哪一个模式下的代码才有权限访问该页。Windows使用了两种访问模式:用户模式和内核模式。用户模式使用的是3级来访问用户空间,而内核模式使用的是0级访问系统空间。

内核对象

为了管理应用程序,系统难免需要维护一些不允许用户应用程序直接访问的应用程序。因此创造了内核对象。

内核对象:系统提供的用户模式下代码与内核模式下代码进行交互的基本接口。
对于每一个内核对象,Windows都提供了在其上操作的API函数,这些API函数使得应用程序有机会读或者写系统数据,但这一切都是在系统的监视下进行的,而且内核对象内部的数据结构是隐藏的。
内核对象的作用:
1)为系统资源提供可识别的名字
2)在进程之间共享资源和数据
3)保护资源不会被未经许可的代码访问
4)跟踪对象的引用情况。这使得系统知道什么时候一个对象不再被使用了,一边释放它占用的空间。

对象句柄

那么内核对象该怎么识别呢?这就需要引入一个重要的概念:对象句柄。句柄是对内核对象的标识,调用函数创建内核对象时,函数会返回标识该内核对象的句柄。它可以作为许多API函数的参数,以便系统知道要操作哪个内核对象。

句柄是进程相关的,也就是仅对创建该对象的进程有效。仅是将句柄传递给其他进程的线程作为API函数的参数是无效的。需要使用DuolicateHandle函数复制一个进程句柄传递给其他进程。

使用计数

内核对象中还存在一个使用计数器,表面对特定内核对象的引用次数。第一次创建时将该使用计数初始化为1,之后每打开一次计数+1,关闭一次计数-1,当计数为0时说明这个内核对象的所有引用都已经关闭,系统应该释放内核资源了。

总结

到这里关于Win32程序运行的基本原理已经介绍了进程、线程、虚拟内存、内核对象、对象句柄、访问计数等知识。接下来将学习进程的创建与控制的有关内容,并用所学知识实现一个简单的内存搜索程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值