所有Windows版本的WinAPI基地址

时间:2017-07-26 02:43:17

标签: c winapi memory-address portable-executable

假设我将Windows API的给定地址硬编码到我的可执行文件中。我是否可以假设此地址将在所有Windows版本(XP,7,Vista,Server07 / 12等)中评估为正确的API?

如果没有,我是否可以在事先得到地址(GetProcAddress或枚举dll序数)的情况下这样做?

我是否必须在我的应用程序中提供带有给定地址的.dll的预先打包版本?

1 个答案:

答案 0 :(得分:3)

你所有问题的答案都是否定的。

相对功能入口点地址因Windows的一个版本而异,即使在系统更新时也会有所不同。

DLL本身的基地址因版本而异。最后,DLL不需要加载到他们想要的基址。他们可能会被重新安置。

最后,您无法重新分发系统DLL。这不仅违反了许可证,而且它不起作用,因为系统DLL只与它们随附的Windows版本兼容。

无论您遇到什么问题,硬编码功能入口点都不是解决方案。