簡體   English   中英

Linux內核中的內存保護

[英]Memory protection in Linux kernel

當共享庫映射到內存時,Linux內核將為此內存區域分配虛擬內存區域並分別標記其權限。 但我們知道x86 arch中的頁表條目中沒有可執行位。 如果在程序中有一個類似“call * edx”的調用指令來調用共享庫中的函數,那么Linux內核如何知道目標地址是否可執行? 如果權限在vma列表中不兼容,是否會導致一般性保護錯誤?

它不能。

在沒有與讀取權限不同的執行頁面權限的體系結構(/操作模式)上,由於MMU檢測到故障,內核將無法發現所謂的非法地址執行。

你是對的,理論上內核可以根據內存區域對象的更細粒度的權限來決定,但是這樣的決策制定過程必須在頁面錯誤處理程序中,我認為這會使例程內存訪問非常貴。

內核在x86上使用了這些簡化規則:

  • 讀權限總是意味着執行權限
  • 寫訪問權限始終意味着讀訪問權限

來源:了解Linux內核,第1版,第205頁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM