2017-08-06 100 views
3

對我來說這不是一個真正的問題,但我開始考慮它,我想我會問。爲什麼每次運行程序時都返回不同的值(0x3759F8B0 - 0x100)?爲什麼每次運行程序時都會返回不同的值? 0x3759F8B0 - 0x100

有一次,它說00AFFD00和下它說006FFD48

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

你正在輸出'test'變量的地址,而不是它的值。 – pat

+0

你的預期的基礎是什麼,它應該始終輸出相同的值? – EJP

回答

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,上述程序確實總是會發出相同的輸出。

+0

你釘它datenwolf!我自己多次想到這個問題 - 今天我學到了一些令人驚歎的地址空間佈局隨機化的新東西 – nitinr708

相關問題