Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建进程[Windows]时虚拟内存的外观如何?_Windows_Memory_Process_Virtual Memory_Low Level - Fatal编程技术网

创建进程[Windows]时虚拟内存的外观如何?

创建进程[Windows]时虚拟内存的外观如何?,windows,memory,process,virtual-memory,low-level,Windows,Memory,Process,Virtual Memory,Low Level,几天前有人问我这个问题,我在互联网上找不到详细的图像,显示了创建进程时虚拟内存的样子 假设进程“program.exe”已经创建 您将如何使用嵌入的图像描述内存布局 你能展示并描述一下“program.exe”在这个布局中的位置吗?导入的DLL在哪里?堆在哪里?堆栈在哪里?内核中发生了什么?等等 我会很高兴为尽可能多的详细图像,你可以 清除内存布局: 部分填充内存布局(顺序并不重要): 请参见以下图表: 内核内存与新进程无关 与每个进程都有自己的映射的用户空间内存不同,内核空间内存只有一个

几天前有人问我这个问题,我在互联网上找不到详细的图像,显示了创建进程时虚拟内存的样子

假设进程“program.exe”已经创建

您将如何使用嵌入的图像描述内存布局

你能展示并描述一下“program.exe”在这个布局中的位置吗?导入的DLL在哪里?堆在哪里?堆栈在哪里?内核中发生了什么?等等

我会很高兴为尽可能多的详细图像,你可以


清除内存布局:

部分填充内存布局(顺序并不重要):


请参见以下图表:

内核内存与新进程无关


与每个进程都有自己的映射的用户空间内存不同,内核空间内存只有一个映射。当线程在内核模式下运行时,无论它属于哪个进程,它都会看到相同的地址空间。

启动Program.exe并使用VMMap查看其布局。那会给你视觉上的印象。它将只显示它的用户空间,因为这是应用程序将看到的,因为它处理的是一个虚拟地址空间,由操作系统为每个应用程序虚拟化,以隔离进程之间的内存。谢谢@AloisKraus。它没有回答我的问题,因为它不是我想要的视觉形式,当然也缺少内核空间。你能试着在你的回答中使用被质疑的图片吗?我认为这个问题是不清楚的。你是什么意思?exe、dll、堆、堆栈-都在用户模式空间中。@RbMm是,但顺序是什么?例如,进程和DLL都在内存中,但在不同的位置。Ntdll.dll也在内存中。Kernel32.dll也在那里。还有什么?将堆栈和堆放在内存中每个进程的何处?这基本上是一个开放的问题,看看我如何在visual..@Moses-first映射exe和ntdll.dll来处理虚拟内存(当然是第一个线程堆栈、teb、peb等),而不是加载其他dll。。不管怎样,你的问题对我来说还不清楚