Win32进程的创建过程
程序员文章站
2024-03-01 13:25:52
...
文章目录
什么是进程
运行在计算机上的程序,为当前的程序提供资源,举一个例子,进程相当于一个房子,房子里的东西由进程提供,房子里走动的人就是线程,进程仅仅提供资源,关于资源怎么用与进程无关。
进程内存空间的地址划分
分区 | x86 32位Windows |
---|---|
空指针赋值区 | 0x00000000~0x0000FFFF |
用户模式区 | 0x00010000~0x7FFEFFFF |
64KB禁入区 | 0x7FFF0000~0x7FFFFFFF |
内核 | 0x80000000~0xFFFFFFFF |
虽然每个进程都有属于自己的4GB虚拟空间,但是只有前面的低2G是属于进程自己的,后面的高2G是所有进程公用的,在OD里我们附加一个进程,然后Alt+m就可以看一下它的内存分配情况了。
每一个进程就像一辆汽车,由许多个零件组成,这里的零件就是模块,我们可以按Alt+e查看这些组成进程的模块:
进程的创建
当一个exe文件躺在我们的硬盘里的时候,它还不是一个进程,这里强调两点:
1、每个进程都不是自己创建的,是由别的进程创建的。CreateProcess()
2、进程的创建过程
2.1映射EXE文件
2.2创建内核对象eprocess
2.3映射系统dll(ntdll.dll)
2.4创建线程内核对象ethread
2.5系统启动线程
2.5.1映射DLL(ntdll.dll)
2.5.2线程开始执行
每一个进程其实是由这个explorer.exe这个进程调用CreateProcess()函数来创建的:
那么这个CreateProcess()函数是如何把一个exe变成进程的呢?这就是上面的第二条:
2、进程的创建过程
2.1 映射EXE文件
2.2 创建内核对象eprocess
2.3 映射系统dll(ntdll.dll)
2.4 创建线程内核对象ethread
2.5 系统启动线程
2.5.1 映射DLL(ntdll.dll)
2.5.2 线程开始执行
我们用图来表示的的创建过程,
这里还没有跑完,还差最后一步,启动线程,在启动线程之前,还需要映射dll,一个PE文件一般是由一个exe程序加许多个dll组成的:
这是笔者这里一个软件需要的dll
每个dll启动时也会带起别的dll,有一定的关联性,这就是为什么我们在OD里会看到那么多的dll,其实很多不是程序自带需的dll,而是需要的那个dll带起来的另一个dll,到这里程序才跑起来:
上一篇: Python学习思维导图(必看篇)
下一篇: vue 组件的深度刷新