为什么每次我 运行 程序时这个 return 不同的值? 0x3759F8B0 - 0x100
Why does this return different values everytime I run the program? 0x3759F8B0 - 0x100
这对我来说不是真正的问题,但我刚开始考虑它,我想我会问。为什么每次我 运行 程序 (0x3759F8B0 - 0x100) 时 return 会有不同的值?
一次显示 00AFFD00,下一次显示 006FFD48
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
我想你的完整程序源应该是
#include <iostream>
using namespace std;
int main()
{
int test;
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
}
正如 @pat 在评论中提到的,您的程序发出变量 test
的 地址 ,而不是它的值。在现代操作系统上,有一种叫做 "address space layout randomization"(ASLR,请参阅 https://en.wikipedia.org/wiki/Address_space_layout_randomization 以获得很好的概述)的东西,它有助于使利用程序中可能存在的安全漏洞变得更加困难。这个想法是,随着程序的每次新启动,它使用的内容的地址都是随机的。因此,变量的地址将在每次启用 ASLR 的情况下启动。
ASLR 现在是主流操作系统的标准功能。但是它可以被禁用(不推荐)并且没有 ASLR 上面的程序确实总是发出相同的输出。
这对我来说不是真正的问题,但我刚开始考虑它,我想我会问。为什么每次我 运行 程序 (0x3759F8B0 - 0x100) 时 return 会有不同的值?
一次显示 00AFFD00,下一次显示 006FFD48
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
我想你的完整程序源应该是
#include <iostream>
using namespace std;
int main()
{
int test;
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
}
正如 @pat 在评论中提到的,您的程序发出变量 test
的 地址 ,而不是它的值。在现代操作系统上,有一种叫做 "address space layout randomization"(ASLR,请参阅 https://en.wikipedia.org/wiki/Address_space_layout_randomization 以获得很好的概述)的东西,它有助于使利用程序中可能存在的安全漏洞变得更加困难。这个想法是,随着程序的每次新启动,它使用的内容的地址都是随机的。因此,变量的地址将在每次启用 ASLR 的情况下启动。
ASLR 现在是主流操作系统的标准功能。但是它可以被禁用(不推荐)并且没有 ASLR 上面的程序确实总是发出相同的输出。