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

标签 winapi linker binaryfiles portable-executable

根据definitions_IMAGE_OPTIONAL_HEADER_IMAGE_OPTIONAL_HEADER64AddressOfEntryPoint是 32 位 DWORD适用于 PE32 和 PE64 文件格式。

为什么是AddressOfEntryPoint对于只有 32 位的 PE64 文件?难道不应该是64位来覆盖整个虚拟地址空间吗?

最佳答案

您链接到的文档显示:

A pointer to the entry point function, relative to the image base address.

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

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

关于winapi - 为什么 64 位可移植可执行文件的入口点地址只有 32 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137372/

相关文章:

forms - TForm.Close 和通过表单句柄关闭有什么区别?

c++ - 在 Qt Creator 中使用 Windows SDK 7.1

c++ - 复制保护静态库

python - 使用 Numpy 读取使用 C++ 数据类型生成的二进制文件

c++ - 如何知道 DeferWindowPos() 是否导致重新分配?

c++ - 将 C++ 程序与 Fortran 库链接时对 _rpoly_ 的 undefined reference

c++ - Visual Studios 2012 更改运行时库导致链接错误,使用 C++

c++ - 如何将二进制文件内容读取为字符串?

c++ - 读取以 bigendian 编写的文件

c - fopen 创建文件 : Access modes Conversion