2012-04-17 47 views
4

如何找出哪些寄存器受到Linux內核的保護,以防止用戶程序集寫入它們?哪些寄存器受到Linux用戶空間的保護?

+0

那麼,控制和調試寄存器通常只能在ring0中訪問,如果這是你的意思... – Damon 2012-04-17 07:17:59

+0

哪個CPU架構? – JeremyP 2012-04-17 15:03:28

+0

i386:x86_84是我的cpu。 – 2012-04-17 19:24:37

回答

15

首先,請注意,Linux內核本身並不真正保護寄存器。它所做的只是確保用戶應用程序以特權級別3(最低特權)運行。從這一點來看,它是執行寄存器保護的處理器。

下面是從0級特權才能訪問寄存器列表(即,從內核):

  • 控制寄存器(CR0 - CR4
  • GDTRLDTRIDTR(全球/本地/中斷描述符表寄存器)
  • TR(任務寄存器)
  • 調試寄存器(DR0-DR7
  • 所有型號專用寄存器(MSR S)

你應該對在x86保護的詳細解釋讀取Intel's System Programming Manual第5章。

+0

x86段寄存器(ss,cs,ds,es,fs,gs)對於用戶空間來說也不是完全公平的遊戲。 (據我所知,主要是隻讀; fs用於標識線程和索引到其線程本地存儲中,例如) – pmdj 2012-04-17 14:08:05

+1

@pmjordan:謝謝。起初我沒有添加它們,因爲我似乎沒有找到任何有關這方面的官方文檔。我測試過,閱讀它們是允許的,直接書寫(通過'mov')不是。但是,我不確定是否允許間接編寫它們(例如通過遠程調用)。 – Job 2012-04-17 14:21:49

+0

謝謝,我正在看那本手冊,感到不知所措。我需要展示正確的方向。所以我想知道,對於那些不提供這種保護的舊體系結構,更改這些寄存器不會是我採取的一個問題。在我看來,操作系統安全性與CPU架構安全功能一樣好。 – 2012-04-17 19:13:46