跳转至

地址空间布局随机化

到目前为止,我把内存地址描述为只随二进制变化的静态整数。这个模型在 Windows XP 及更早版本上是正确的。但在后来的 Windows 系统上,内存地址只是相对于游戏二进制基址的静态值,因为这些系统为支持的二进制启用了称为地址空间布局随机化(ASLR)的功能。当二进制以 ASLR 支持编译时(在 MSVC++ 2010 和许多其他编译器上默认启用),它的基址每次运行都可能不同。相反,非 ASLR 二进制总是有 0x400000 的基址。

 由于 ASLR 在 XP 上不工作,我把 0x400000 称为 XP 基址。