对我来说这不是一个问题,但我刚开始考虑它,我想我会问。为什么每次运行程序时都会返回不同的值(0x3759F8B0 - 0x100)?
有一次它说00AFFD00而下一个说006FFD48
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
答案 0 :(得分:8)
我认为您的完整程序源读为
#include <iostream>
using namespace std;
int main()
{
int test;
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
}
正如@pat在评论中已提到的,您的程序会发出变量test
的地址,而不是其值。在现代操作系统上,有一种称为“地址空间布局随机化”的东西。 (ASLR,请参阅https://en.wikipedia.org/wiki/Address_space_layout_randomization以获得良好的概述),这有助于更难以利用程序中可能存在的安全漏洞。这个想法是,随着程序的每个新开始,它使用的东西的地址是随机的。因此,在启用ASLR的每次启动时,变量的地址都会发生变化。
ASLR现在是主流操作系统的标准功能。但是它可以被禁用(不推荐),如果没有ASLR,上面的程序确实会发出相同的输出。