为什么每次运行程序时都会返回不同的值? 0x3759F8B0 - 0x100

时间:2017-08-06 07:06:55

标签: c++ memory-address

对我来说这不是一个问题,但我刚开始考虑它,我想我会问。为什么每次运行程序时都会返回不同的值(0x3759F8B0 - 0x100)?

有一次它说00AFFD00而下一个说006FFD48

test = 0x3759F8B0 - 0x100; 
cout << &test << endl;

1 个答案:

答案 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,上面的程序确实会发出相同的输出。