WIN32程序运行原理
CPU的工作方式:
80386处理器的3种工作方式:
实模式:
保护模式:
虚拟86模式:
虚拟内存
保护模式下80386所有32根地址线都可供寻址,寻址范围:0x00000000~0xFFFFFFFF(2^32,4G)
实际工作,进程不可能使用所有的系统空间;空间分为系统空间和用户空间
系统空间:系统空间中所有进程是共享的,这部分数据被保护起来
用户空间:进程私有的空间,所有的应用程序的数据都存放在这部分空间
两种访问模式(内核模式和用户模式)
Windows为防止程序访问或修改关键的系统数据,系统设置了两种访问模式:内核模式和用户模式;
内核模式:系统程序(系统驱动等)代码在内核模式下运行
用户模式:用户程序代码在用户模式下运行
当用户的应用程序调用一个系统函数时,程序会从用户模式切换到内核模式去执行;
内核对象
内核对象:用户模式下代码与内核模式下代码进行交互的基本接口;
对象句柄:句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量;
计数法——系统管理内核对象的方式
一个进程在第一次创建内核对象时,系统为其分配资源,并将其计数属性初始化为1;后续每次打开这个内核加1,如果关闭则减1,减到0说明进程对这个内核对象所有引用都关闭,系统释放此内核对象的资源。
应用程序的启动过程
进程:进程是正在运行的程序
线程:线程是进程执行代码的独立实体,
主线程:操作系统创建进程后,会创建一个线程执行进程中的代码;主线程在运行过程中可能会创建其他线程(辅助线程)。
线程只能访问属于它的进程的内存,属于其他进程的内存被屏蔽(不能被它访问)
例:A进程的地址0X12345存一个数据,B进程在地址0X12345可以存一个不一样的数据;A访问0X12345时只能访问A中的数据,B则访问的是B的。
应用程序的启动过程:
操作系统通过调用 CreateProcess函数创建新进程(内核计数会加1),接着系统会为新进程创建一个主线程,主线程通过运行启动代码调用main函数;
(若系统创建新的进程和进程的主线程成功,CreateProcess函数会返回TURE,否则返回FALSE)
父进程:创建进程的进程
子进程:被创建的进程
STARTUPINFO:系统在创建新的进程会为新进程指定一些信息,这个结构包含了父进程传递给子进程的一些信息;
CreateProcess函数:用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。