為配合主幹穩定開發模型,並確保生態系統的平台穩定性,我們將於 2026 年起,在第 2 季和第 4 季將原始碼發布至 AOSP。如要建構及貢獻 AOSP,建議使用 android-latest-release,而非 aosp-main。android-latest-release 資訊清單分支版本一律會參照推送至 AOSP 的最新版本。詳情請參閱「Android 開放原始碼計畫變更」一文。
Google uses AI technology to translate content into your preferred language. AI translations can contain errors.
ShadowCallStack
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
ShadowCallStack (SCS) 是一種 LLVM 檢測模式,可在非葉節函式的函式前言中將函式的傳回位址儲存至個別配置的 ShadowCallStack,並在函式結尾從 ShadowCallStack 載入傳回位址,藉此防止傳回位址覆寫 (例如堆疊緩衝區溢位)。回傳位址也會儲存在一般堆疊上,以便與解開器相容,但不會用於其他用途。這可確保修改一般堆疊上的回傳位址的攻擊不會影響程式控制流程。
在 aarch64 上,檢測功能會使用 x18 暫存器來參照 ShadowCallStack,也就是說,ShadowCallStack 的參照不需要儲存在記憶體中。這樣一來,就能實作執行階段,避免將 ShadowCallStack 的位址公開給可讀取任意記憶體的攻擊者。
實作
Android 支援核心和使用者空間的 ShadowCallStack。
為核心啟用 SCS
如要為核心啟用 ShadowCallStack,請在核心設定檔中加入以下這行程式碼:
CONFIG_SHADOW_CALL_STACK=y
在使用者空間中啟用 SCS
如要在使用者空間元件中啟用 ShadowCallStack,請在元件的藍圖檔案中加入下列行:
sanitize: {
scs: true
}
SCS 會假設 x18 註冊機制是用來儲存 ShadowCallStack 的位址,且不會用於其他用途。雖然所有系統程式庫都會編譯以保留 x18 註冊器,但如果為與程序內舊版程式碼互動的使用者空間元件啟用 SCS,可能會覆寫 x18 註冊器,因此可能會發生問題。因此,我們只建議在不會載入至舊版二進位檔的獨立元件中啟用 SCS。
驗證
並沒有專門針對 SCS 進行的 CTS 測試。請改為確認啟用和未啟用 SCS 時,CTS 測試是否都通過,以驗證 SCS 不會影響裝置。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-12-03 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-12-03 (世界標準時間)。"],[],[]]