首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 指針硬編碼記憶體地址:CX0069 錯誤與 ASLR 影響

     編輯:程式設計綜合問答

錯誤現象

VS2010 編譯報 CX0069: error: variable requires stack frame;Ubuntu GCC 僅警告 assignment makes pointer from integer without a cast。

核心問題

代碼 int *p = (int *)0x00bef95c; 將上一次運行觀察到的變數 i 地址硬編碼。現代作業系統啟用 **ASLR (Address Space Layout Randomization)**,每次程式載入的虛擬記憶體佈局不同,該地址極大機率無效或屬於其他進程/保護頁,導致寫入時觸發段錯誤或編譯器診斷。

為何 VS 報錯、GCC 僅警告?

MSVC 對可疑指針運算檢查更嚴格,偵測到常數轉指針且無符號擴展視為錯誤;GCC 僅提示類型轉換風險。

正確做法

若需共享記憶體,使用命名共享記憶體、記憶體映射檔或 IPC 機制;切勿硬編碼地址。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved