代码编织梦想

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
线程开始执行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/woaijianji/article/details/126416463

进程初学——使用win32api创建进程-爱代码爱编程

CreateProcess(lpApplicationName,//String,要执行的应用程序的名字 lpCommandLine,//String,要执行的命令行 lpProcessAttributes,//SEQURITY_ATTRIBUTES,指定一个SEQURITY_ATTRIBUTES结构,或传递零值 lpthreadAttribu

win32 api编程----createprocess 创建一个新的进程_凌霜残雪的博客-爱代码爱编程

环境 :win10 +vs 2013 1、新建控制台应用程序,修改名称CreateProcess 2、选择空项目后点击完成。 3、右击源文件—添加—新建项目—新建CreateProcess.cpp文件。 4、CreateProcess 函数原型: BOOL CreateProcess ( LPCTSTR lpApplicationNa

win32编程视频的相关笔记二_kernweak的博客-爱代码爱编程

虚拟内存与物理内存 1. 虚拟内存与物理内存关系 可以使用的内存不一定有物理页,必须申请内存了才有物理页。 物理页数量限制由内存条限制 物理内存 pagefile.sys,就是用硬盘存放物理页。 私有

win32 api编程:使用createprocess创建新进程_alisa_xf的博客-爱代码爱编程

1. CreateProcess 说明: WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。 函数原型: BOOL CreateProcess (     LPCTSTR lpApplicationName,            LPTSTR lpCommandLine,          

Windows编程之进程的创建-爱代码爱编程

本文原创,最早发表于公司内部博客, 禁止转载 文章目录 前言一. PE文件格式简介1.1. 基本概念1.2. MS-DOS头1.3. PE文件头1.4. 区块二. R0和R3三. 进程虚拟地址空间3.1. 进程隔离3.2. 虚拟地址空间介绍3.3. 虚拟地址空间分区3.4. 分页3.5. VirtualAlloc、HeapAlloc、malloc、n

linux系统多进程编程实例,Linux操作系统下的多进程编程详细解析(2)-爱代码爱编程

此程序从终端读入命令并执行之,执行完成后,父进程继续等待从终端读入命令。熟悉DOS和WINDOWS系统调用的朋友一定知道DOS/WINDOWS也有exec类函数,其使用方法是类似的,但DOS/WINDOWS还有spawn类函数,因为DOS是单任务的系统,它只能将“父进程”驻留在机器内再执行“子进程”,这就是spawn类的函数。WIN32已经是多任务的系

【Win32】进程以及句柄-爱代码爱编程

注意:本文为学习win32时所写,如有错漏,烦请指出,万分感谢 1、线程与进程是什么         ①进程:所谓进程,是一个空间的概念,里面装的就是代码执行时所有所需要的资源         ②线程:所谓线程,是一个动态的概念,简单来说就是跑起来的代码         所以,一个进程至少要有一个线程才是有意义的 2、进程如何创建的 分区:

c++程序启动时报“0xc000007b”无法启动的问题排查_dvlinker的博客-爱代码爱编程

目录 1、问题描述 2、启动时报缺少运行时库 3、拷贝运行时库后,启动报0xC000007B错误 4、尝试用Windbg启动exe,看Windbg能否捕捉到相关线索 5、尝试到计算机管理中去查看系统应用程序日志,看是否有相关记录 6、继续分析引发0xC000007B错误原因 7、复盘出问题时所做的操作,最终确定问题 8、对于程序位数和操作系

## win32系统编程进程的创建方法_青山隐逸的博客-爱代码爱编程

Win32系统编程进程的创建方法 进程的创建过程上一章已经解释过了 这里直接介绍win32中如何创建进程 在创建进程的时候调用下面的函数方法,简单介绍四个会用到的参数,标注成中文了 CreateProcess( NULL,

win32系统编程 什么是句柄表_青山隐逸的博客-爱代码爱编程

什么是句柄表? 先要了解什么是内核对象,像线程、进程、文件、互斥体、事件等在内核都有一个对应的结构体,这些结构体由内核负责管理。我们管这样的对象叫做内核对象。 比如你创建进程、线程、和文件,在内核层会有对应的结构体,对进