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位就足够了。