Winapi 为什么64位可移植可执行文件的入口点地址只有32位?

Winapi 为什么64位可移植可执行文件的入口点地址只有32位?,winapi,linker,binaryfiles,portable-executable,Winapi,Linker,Binaryfiles,Portable Executable,根据\u IMAGE\u OPTIONAL\u HEADER和\u IMAGE\u OPTIONAL\u HEADER64的格式,对于PE32和PE64文件格式,入口点的地址是32位DWORD 为什么PE64文件的入口点地址只有32位?覆盖整个虚拟地址空间不是应该是64位吗?您链接到的文档中说: 相对于映像基址,指向入口点函数的指针 相对于基址而言,这意味着映像可以位于地址空间中的任何位置 这确实间接地意味着入口点与基址的偏移量不能超过4GB,但这不是限制。由于其他原因,PE映像的大小不能大于4

根据
\u IMAGE\u OPTIONAL\u HEADER
\u IMAGE\u OPTIONAL\u HEADER64
的格式,对于PE32和PE64文件格式,
入口点的地址是32位
DWORD


为什么PE64文件的入口点地址只有32位?覆盖整个虚拟地址空间不是应该是64位吗?

您链接到的文档中说:

相对于映像基址,指向入口点函数的指针

相对于基址而言,这意味着映像可以位于地址空间中的任何位置


这确实间接地意味着入口点与基址的偏移量不能超过4GB,但这不是限制。由于其他原因,PE映像的大小不能大于4GB。例如,
SizeOfImage
是一个
DWORD
,这意味着图像大小限制为4GB。

部分不能大于4GB,这是一个基本的操作系统限制。所以32位就足够了。