1.进程
当程序执行起来以后才能称为进程。每个进程的编号是唯一的。
什么是进程?
进程提供当前程序所需的资源,如:数据、代码等等
进程是空间上的概念,仅仅是提供程序运行所需的资源,至于资源怎么用,跟它一点关系都没有。
每一个进程都有一个虚拟的4GB空间,虚拟内存从00010000开始,前面的64K是空白的,正常情况下是不会被使用的,非正常情况下还是可以使用的,虚拟内存的最大内存地址是7FFE0000,为什么呢?因为每个进程的高2G是内核的空间,是大家共用的,所以只有低2G是进程自己的空间
好比在现实生活中,一个房子就是进程,里面的沙发,电视机就是进程提供的资源,而房子里面使用这些资源的人是线程。
2.进程内存空间的地址划分
分区 | x86 32位Windows |
---|---|
空指针赋值区 | 0x00000000-0x0000FFFF |
用户模式区 | 0x00010000-0x7FFEFFFF |
64KB禁入区 | 0x7FFF0000-0x7FFFFFFF |
内核 | 0x80000000-0xFFFFFFFF |
进程由很多模块组成,每一个模块都提供了代码和数据,这些模块都遵循着相同的格式,这个格式称为PE文件结构。换句话说,进程就是一堆PE文件。
3.进程的创建
1)任何进程都是别的进程创建的:CreatePreocess()
2)进程的创建过程:
1、映射EXE文件
2、创建内核对象EPROCESS
3、映射系统DLL(ntdll.dll)
4、创建线程内核对象ETHREAD
5、系统启动线程
映射DLL(ntdll.LdrlnitializeThunk)
线程开始执行