win32系统编程 实际的进程是什么和进程的创建过程_青山隐逸的博客-爱代码爱编程
win32系统编程 实际的进程是什么和进程的创建过程
进程:进程提供程序所需的资源,如:数据,代码等等。(程序和进程要区分开,程序是静止不动的)
首先 随便启动一个程序,然后用dtdbug找到这个程序的进程并打开
现在下面看到的就是这个进程的内容
强调一个点,大家可以看到下面第一行其实就是这个进程开始的第一行代码,可以看到是从00010000开始的,结尾是7FFE000。
相信有点基础的朋友肯定知道一个进程创建的时候系统会分配4G的内存空间,
那这里有两个疑问,为什么进程是从00010000开始的,并且为什么到7EEE000就结束了。
看下面这张图就明白了
#进程内存空间的地址划分
从00010000开始是因为00010000开始-0000FFFF都是空指针复制区
到7EEE000就结束是因为,只有低两G的空间是属于进程自己的,剩下的高两G是属于内核的。
小科普:(大佬直接略过):为什么一个进程就分配4G,一开机一堆程序启动,这样的话我电脑才8G那不是不够用了?其实一个程序分配4G内存并不是真正的4G,或者说并不是直接分配出来给你用,只有你某段进程中的代码需要运行,然后申请内存后才会分配给你使用。
进程是如何创建的
1、你是如何启动一个程序的,无非是双击一个程序,那这个程序真的是你双击启动起来的吗?或者说这个进程真的是你双击启动起来的吗?
其实不是的,实际上是通过一个叫做explore.exe这个系统进程创建的,你可以打开任务管理器看看这个进程。
2、那explore.exe又是怎么创造你双击的程序的进程的呢?其实是explore.exe调用了一个函数,CreateProcess()进行创建的。
3、CreateProcess()函数工作的过程如下:
1、映射EXE文件
2、创建内核对象EPROCESS
3、映射系统DLL
4、系统线程内核对象ETHREAD
5、系统启动线程
映射DLL
线程开始执行