字元值為0xcc

2021-05-23 15:07:41 字數 2358 閱讀 1018

0xcc  16進製制數,相當於十進位制的204

未初始化的變數

debug模式下執行時,未初始化的變數會被系統賦初值為0xcc

未初始化的變數會被系統賦初值為0xcc,超過了ascii碼0-127這個範圍,因此這個「字串」被系統當成了寬字元組成的字串,即兩個位元組資料組成乙個字元,而0xcccc表示的寬字元正好是亂碼中的那個「燙」字。

燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙燙

是debug中未初始化的棧變數

屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯

是debug中未初始化的堆變數  

**"燙燙燙燙"是怎麼來的

在用vc寫**時,經常會遇到在棧中申請空間的並且沒有被初始化的字元陣列就會顯示"燙燙燙燙。。。",雖然是知道編譯器對棧中沒有初始化的資料會進行預設的初始化工作,但是一直不得要領,在拜讀《程式設計師的自我修養》的時候有所收穫,還挺有意思的,寫出來和大家分享。

**很簡單,就是在棧中申請了乙個大小為4個位元組的字元陣列。

用斷點檢視x的值,可以發現,「燙燙」出現了:

x 0x0012ff60 "燙燙燙燙?" char [4]

檢視反彙編:

簡單解釋一下關鍵句的含義:

004113ac 8d bd 34 ff ff ff lea         edi,[ebp-0cch]

將獲得的0cch大小的棧空間首位址賦給edi

004113b2 b9 33 00 00 00   mov         ecx,33h

rep的迴圈次數為33h

004113b7 b8 cc cc cc cc   mov         eax,0cccccccch

eax = 0cccccccch 

004113bc f3 ab            rep stos    dword ptr es:[edi]

將棧空間的33h個雙位元組賦值為0cccccccch

而0xcccc用漢語表示剛好就是「燙」

oxcc正好是中斷int 3的指令 起到保護作用

是記憶體太熱了嗎?哈哈,當然不是。。

以下**csdn

在   debug   模式下會自動加上   /gz   編譯選項,它可以幫助捕獲記憶體錯誤。   

/gz   選項會做以下這些事   

(1)   初始化記憶體和變數。包括用   0xcc   初始化所有自動變數,0xcd   (   cleared   data   )   初始化堆中分配的記憶體(即動態分配的記憶體,例如   new   ),0xdd   (   dead   data   )   填充已被釋放的堆記憶體(例如   delete   ),0xfd(   defencde   data   )   初始化受保護的記憶體(debug   版在動態分配記憶體的前後加入保護記憶體以防止越界訪問),其中括號中的詞是微軟建議的助記詞。這樣做的好處是這些值都很大,作為指標是不可能的(而且   32   位系統中指標很少是奇數值,在有些系統中奇數的指標會產生執行時錯誤),作為數值也很少遇到,而且這些值也很容易辨認,因此這很有利於在   debug   版中發現   release   版才會遇到的錯誤。要特別注意的是,很多人認為編譯器會用   0   來初始化變數,這是錯誤的(而且這樣很不利於查詢錯誤)。   

(2)   通過函式指標呼叫函式時,會通過檢查棧指標驗證函式呼叫的匹配性。(防止原形不匹配)   

(3)   函式返回前檢查棧指標,確認未被修改。(防止越界訪問和原形不匹配,與第二項合在一起可大致模擬幀指標省略fpo)   

「燙」字的mbcs編碼為「cccc」,而用   /gz   選項對自動變數會用「0xcc」初始化,連續的「0xcc」將被誤讀成「燙」字元。

debug版函式初始化入口 0xcc

在vc 編寫的程式程式設計成debug版,反彙編 函式入口處經常看到如下一段 00ea14e0 55 push ebp 00ea14e1 8b ec mov ebp,esp 00ea14e3 81 ec c0 00 00 00 sub esp,0c0h 00ea14e9 53 push ebx 00...

GROUP BY 如果為空值顯示為0

原 select province,count id from gutan policy where gas source 稻田甲烷 or gas source like 稻田甲烷 or gas source like 稻田甲烷,or gas source like 稻田甲烷,修改後select a...

為什麼PR值顯示為0

先看下你 首頁 所對應的鏈結是ww w.c om或是w ww.co m index.html ww w.com ind ex.php或其他。如果你的網域名稱pr值大於0,而首頁在瀏覽器pr值外掛程式上顯示為0,則是因為你 首頁鏈結設定問題。現在基本上80 的 因為沒有這個意識,的 首頁 往往不是設定...