用於將堆記憶體分配給Intel® Software Guard Extensions (Intel® SGX) 指定位址空間的進程
無法確定大於可用 Enclave Page Cache (EPC) 記憶體的堆記憶體如何在創建時分配給指定位址空間。
Intel® Software Guard Extensions (Intel® SGX) 使用 EADD 處理器指令將記憶體(包括堆)添加到指定位址空間。要 EADD 堆頁面,必須有一個可用的可用 Enclave Page Cache (EPC) 頁面。如果免費頁面已存在,EAD 會立即使用它。如果 EPC 已滿,則會分頁並釋放當前正在使用的頁面。現在的空閒頁面可用於堆頁面。此頁面位於 EPC 中,因為它是新釋放的頁面。無論哪種情況,都不會交換任何頁面。實際發生 EADD 時,該頁面將已存在於 EPC 中 — 無需分頁或交換。
代碼如下:
- 首先,SGX 標誌工具 確定指定位址空間佈局。它將佈局資訊放在中繼資料中。下面是添加堆並將其設置為僅 EADD 的位置: manage_metadata#L775
- 在 enclave 載入期間,不受信任的運行時系統 (uRTS) 載入程式會迴圈流覽佈局條目並相應地添加: loader.cpp#L382
- 每個指定位址空間頁面都是通過調用驅動程式來添加的,該驅動程式調用 EADD: loader.cpp#L311