64位Windows上PE文件的最大大小是多少?

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位整数.


Buk*_*kes 8

根据COFF/PE32规范,有效PE32 +(64位/(PE +)文件的图像大小是4字节无符号值.