首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在64位Windows上,PE文件的最大大小是多少?

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

Stack Overflow用户
提问于 2011-08-08 08:10:19
回答 3查看 5.3K关注 0票数 13

在我看来,它总是4 4GB,因为它使用相同大小的数据类型( DWORD)?SizeOfImage的DWORD值不是一直是32位的吗?或者我对这个限制的理解是错误的?

回答

4 4GB似乎确实是所有可移植可执行文件(32位和64位PE+)的硬限制。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-23 11:35:16

根据spec,它是PE32+镜像的32位无符号值,就像PE32镜像一样。

然而,在我对Windows7 SP1家庭高级版x64上的32位和64位应用程序(PE32/PE32+文件)的测试中,这两种应用程序的最大文件大小都在1.8-1.85 64之间。

我使用Visual Studio创建了一个非常基本的C可执行文件(32位约为8K,64位约为9K ),并在PE头中添加了一个空的代码部分,直到Windows不再加载它,然后对限制进行二进制搜索。使用vmmap查看进程会发现,整个前2 2GB的地址空间几乎都是映像(包括任何后续加载的DLL,如kernel32.dll)。对于我来说,32位和64位进程的限制是相同的。它还可以为超过2 2GB限制的非图像部分分配内存。

对于这个过程,图像似乎需要完全适合低2 2GB的VA空间,这意味着SizeOfImage正在被加载器有效地处理为带符号的32位整数。

票数 13
EN

Stack Overflow用户

发布于 2011-08-08 08:39:49

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

票数 8
EN

Stack Overflow用户

发布于 2020-08-01 23:52:03

PE报头中的ImageSize字段在很大程度上与PE文件在磁盘上的文件大小无关。ImageSize是已加载映像的内存大小,即所有部分的大小(每个部分四舍五入到SectionAlignment边界)+ PE标头的大小(在下一个标头字段SizeOfHeaders中给定)。对于PE32或PE32+,此值不能大于2 2GB,因为a)规范说明了这一点,并且b)规范中存在31位RVA,例如,在导入查找表中。RVA是作为相对于内存中基地址的偏移量给出的内存引用。

不过,这是在内存中。磁盘上的文件可以包含未加载到内存中的数据(例如调试数据、证书数据)。PE规范中的文件指针字段是32位无符号值。因此,根据规范,一个PE文件的理论最大大小是4 4GB。

这是按照说明书的。可能存在PE规范之外的文件系统、加载器、操作系统限制,从而进一步降低最大限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6976693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档