exe文件的大小与可用内存的大小

时间:2015-03-09 11:42:05

标签: windows memory portable-executable sections

我经历过How does a PE file get mapped into memory?,这不是我要求的。

我想知道PE文件的哪些部分(数据,文本,代码......)总是被加载器完全加载到内存中,无论条件是什么?

根据我的理解,没有任何部分(代码,数据,资源,文本......)总是完全加载,它们在需要时逐页加载。如果几页代码(中间或末尾)不需要处理用户的请求,那么这些页面将不会总是被加载。

我已经尝试使用大量带有/不带资源的代码制作exe文件,但这些代码根本没有使用,但是,每次exe加载到内存中时,它需要的内存比文件大小多。 (我可能一直在查看任务管理器中错误的内存列)

Matt Pietrek写道here

  

重要的是要注意PE文件不仅仅映射到内存中   作为单个内存映射文件。相反,Windows加载器会查看   PE文件并决定要映射的文件部分。

  

内存中的模块表示来自的所有代码,数据和资源   进程所需的可执行文件。 PE的其他部分   可以读取文件,但不映射(例如,重定位)。一些   部分可能根本没有映射,例如,在调试信息时   放在文件的末尾。

简而言之,

1-有一个大小为1 MB的exe,可用内存(物理+虚拟)小于1 MB,加载程序始终拒绝加载是否一致,因为可用内存小于文件大小?

2-如果大小为1 MB的exe在加载时开始运行2 MB内存(开始运行第一行用户代码),而可用内存(物理+虚拟)为1.5 MB,则加载程序始终拒绝加载是否一致,因为内存不足?

3-有一个大小为50 MB的exe(大量的代码,数据和资源),但它需要500 KB才能运行第一行用户代码,如果这个exe将始终运行第一行代码是一致的可用内存(物理+虚拟)至少是500 KB?

0 个答案:

没有答案