自己給自己寫了一個有趣的BUG,數組越界越到程序自身的安全空間

在這裏插入圖片描述
當初爲了把0x0-0xFF打亂,因爲char和unsigned char保存到內存的值都是一樣的,都是十六進制(也就是-1的char和255的unsigned char做一個字節的比較時是相等的,因爲十六進制都是0xFF),只是表示出來不一樣而已,所以就沒用unsigned char。結果就出現了上面BUG,當value=-23~-21時纔會這樣,count的值大於了256,跳出了循環。

原因:

打三個地址出來一看,count的地址(0x4ffc28 )- flag(0x4ffc40)等於十進制的-24,所以flag(0x4ffc40)地址開始,-23到-20是count的內存空間,且下標索引是有符號的,而-20的內存空間剛好的count的低8位,賦值爲1是不會<256的,所以-20並不會發生跳出循環的問題。但如果是-21賦值爲1,那就相當於count |= 0x100了。所以爲了避問造成這樣的問題,下標索引時最好都用無符號類型的,除非能100%確定沒有負數。

注:windows是小端,也就是地址越大,位數越低,所以0x4ffc2b是count的低8位

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章