Windows 上 PE 文件 (exe) 的最小文件大小是多少?
以及最小内存分配?
我(使用 VS 10 附带的 MASM (ml.exe) 和 link.exe)组装了以下代码:我不能忽略 kernel32.lib 和 ExitProcess,如果我这样做,程序就会崩溃。
; Assmebly options
.386
.MODEL FLAT, STDCALL
option casemap:none
; Include Libs
includelib kernel32.lib
; Imported symbols
ExitProcess PROTO :Dword
Sleep PROTO :Dword
; Code
.CODE
start:
invoke Sleep, 10000
invoke ExitProcess, 0
END start
包含 Sleep 命令只是为了能够在程序结束之前读取内存使用情况。
现在我测量以下内容:.exe 文件的大小正好是 2.5 KB(如果我包含 user32.lib 和 MessageBoxA,它的大小将变为 3 KB --> 块?)并且应用程序在运行时使用 136 KB RAM(Vista 32 位)。
对于这么简单的程序来说,内存是不是有点大了?为什么exe文件这么大,而且内存要求比exe文件大得多?
有最小内存大小吗?文件呢?看起来它是以 0.5 KB 大小的块来组织的,但是对于这个最短的程序来说,它不是 0.5 KB 吗?
我在哪里可以读到这方面的内容(除了http://msdn.microsoft.com/en-us/magazine/cc301805.aspx http://msdn.microsoft.com/en-us/magazine/cc301805.aspx我会检查一下)?
谢谢(我的第一个问题)
ntdll.dll 被映射到每个进程,并在代码开始运行之前执行大量基本初始化。这总是会导致分配少量的私有内存。看一眼LdrpInitializeProcess
;这是一小部分内容:
- 它创建进程堆。
- 它为当前线程设置激活上下文堆栈。
- 它初始化几个关键部分。这几乎总是会导致内存被分配。
此外,加载到进程中的其他 DLL(例如 kernel32.dll、user32.dll)可能会自行分配内存,DllMain
功能。
编辑:看看我创建的这个简单的测试程序:
它是一个完全本机的程序(没有 Win32),并且仅从 ntdll.dll 导入两个函数:NtDelayExecution
and NtTerminateProcess
。它与您的程序非常相似,尽管它除了睡眠之外不执行任何操作,但它仍然使用 100 kBprivate记忆。该文件大小为 2.5 kB,就像您的程序一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)