std::cout << (DWORD)"test";
如果我編譯並運行這個,我會得到不同的輸出值,但我不明白爲什麼。爲什麼在將字符串類型轉換爲DWORD時在運行時會得到不同的值?
任何想法? PS:我正在使用Windows 7 64位,並且正在使用Microsoft Visual C++ 2010 Ultimate編譯。
std::cout << (DWORD)"test";
如果我編譯並運行這個,我會得到不同的輸出值,但我不明白爲什麼。爲什麼在將字符串類型轉換爲DWORD時在運行時會得到不同的值?
任何想法? PS:我正在使用Windows 7 64位,並且正在使用Microsoft Visual C++ 2010 Ultimate編譯。
在您的代碼中,「test」實際上是指向字符串開頭的指針。當你將它轉換爲DWORD
時,將指針轉換爲整數類型,並寫出該數字。
由於存儲「測試」的內存位置可能隨着每次運行而改變,因此您看到的值將會改變。
哦......好吧,我認爲這是一個非常明顯的超視距。謝謝! – Purebe
至於*爲什麼*字符串常量(來自可執行文件的靜態數據段)的地址隨着每次運行而改變,這可能是由於[地址空間佈局隨機化](http://en.wikipedia.org/wiki/ Address_space_layout_randomization)(ASLR)。 –
std::cout << (DWORD)"test";
是相同的:
這將打印相同值,如果你這樣做也:
const char *tmp = "test";
std::cout << (DWORD)tmp;
也就是說,它鑄造成DWORD
後打印地址:
std::cout << (const void*)"test";
你期望從中得到什麼? –
這是一個愚蠢的事情,但一個有效的問題 - 沒有看到downvote的理由。 – Puppy
我正在學習如何確定一個遠程過程基地址,這個地址可能是''pinball.exe''',並且我的理解是使用這個偏移量(比如說讀一個遊戲的分數)來使用它'DWORD address =(DWORD)「pinball.exe」+ offset;'其中'offset'可能是沿着'0xFC'或其他什麼的。 – Purebe