![](/img/trans.png)
[英]HWND abc = 0x100; This does not work, and I understand why. How to do it then?
[英]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.