簡體   English   中英

為什么每次運行程序時都會返回不同的值? 0x3759F8B0 - 0x100

[英]Why does this return different values everytime I run the program? 0x3759F8B0 - 0x100

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

有一次它說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地址 ,而不是它的值。 在現代操作系統上,有一種稱為“地址空間布局隨機化”的東西(ASLR,請參閱https://en.wikipedia.org/wiki/Address_space_layout_randomization以獲得良好的概述),這有助於更難以利用可能存在的安全漏洞。程序。 這個想法是,隨着程序的每個新開始,它使用的東西的地址是隨機的。 因此,在啟用ASLR的每次啟動時,變量的地址都會發生變化。

ASLR現在是主流操作系統的標准功能。 但是它可以被禁用(不推薦),如果沒有ASLR,上述程序確實會發出相同的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM