uni*_*n83 12 windows 64-bit portable-executable 32bit-64bit
在我看来它总是4GB,因为它使用相同大小的数据类型(一个DWORD)?SizeOfImage
总是不是32位的DWORD ?或者我错了这个限制?
4GB确实似乎是ALL Portable Executable(32位和64位PE +)的硬限制.
Zac*_*ame 12
根据规范,PE32 +图像的32位无符号值就像PE32图像一样.
但是,在我使用Windows 7 SP1 Home Premium x64上的32位和64位应用程序(PE32/PE32 +文件)进行的测试中,两者的最大文件大小介于1.8-1.85GB之间.
我通过使用Visual Studio创建一个非常基本的C可执行文件(对于32位为~8K,对于64位为9K)进行测试,并向PE头添加一个空代码段,直到Windows不再加载它,然后二进制搜索极限.使用vmmap查看进程显示,几乎所有前2GB的地址空间都是映像(包括任何后续加载的DLL,如kernel32.dll).对于32位和64位进程,我的限制是相同的.64位进程确实在其NT Header的File Header部分设置了标志,声明它可以处理> 2GB的地址.它还可以为高于2GB限制的非图像部分分配内存.
看起来图像需要在整个过程的低2GB VA空间中完全适合它,这意味着有效地使用加载器对SizeOfImage处理带符号的32位整数.
归档时间: |
|
查看次数: |
4085 次 |
最近记录: |