解釋

解釋

解釋

有兩種位址空間:虛擬位址空間和實體位址空間。關於實體模型(通常由核心使用)記憶體是有界的,每個位址都與實體位址相對應。

虛擬的被進程使用。沒有限制(因指針大小而導致的除外)。為了獲得更多內存,程式只需請求它(忽略可以要求的金額)。每個位址都對應到不同的實體位址。
這就是進程如何限制它們可以從記憶體讀取的內容。

問題

推理是系統呼叫使用ring0,但同時(至少在Linux上)進程狀態更新為可中斷,表示系統呼叫使用虛擬位址空間。
據我了解,CPU環是關於特權指令的,而不是關於位址空間的(因為它與MMU相關)

所以如果越界讀取(由於漏洞)發生在內核程式碼中的系統呼叫執行期間。它可以從其他進程返回記憶體嗎?

答案1

核心模式程式碼幾乎可以做任何它想做的事情,包括窺探各種行程的位址空間。

是的,核心模式代碼使用虛擬位址空間。核心管理實體位址空間,但事實並非如此跑進實體位址空間。

使用者模式無法從 RAM 中讀取任何它想要的內容,因為它無法斷言物理位址。

由於核心模式在啟用位址轉換的情況下運行,因此核心模式程式碼也只能斷言虛擬位址。但是 k 模式代碼可以設定頁表條目來定義虛擬位址,這些虛擬位址可以轉換為它可能想要存取的任何實體位址。

答案2

核心呼叫的系統呼叫使用物理位址空間。
進程呼叫的那些系統呼叫使用虛擬位址空間。

相關內容