大多數現代操作系統在保護模式下運行。現在用戶程序可以通過在一些控制寄存器中直接設置相應的位來進入「環0」。還是必須經過一些系統調用。進入0環從用戶模式
我相信訪問我們需要去通過操作系統的硬件。但是如果我們知道硬件設備的地址,那麼我們可以參考設備的位置編寫一些彙編語言代碼並訪問它。當我們在彙編語言代碼中給出一些硬件設備的地址時會發生什麼。
謝謝。
大多數現代操作系統在保護模式下運行。現在用戶程序可以通過在一些控制寄存器中直接設置相應的位來進入「環0」。還是必須經過一些系統調用。進入0環從用戶模式
我相信訪問我們需要去通過操作系統的硬件。但是如果我們知道硬件設備的地址,那麼我們可以參考設備的位置編寫一些彙編語言代碼並訪問它。當我們在彙編語言代碼中給出一些硬件設備的地址時會發生什麼。
謝謝。
進入鈴聲0,你必須執行一個系統調用,並根據其性質,系統控制你走到哪裏,因爲呼叫你只需給一個索引到CPU,以及CPU的內部結構是一個表就知道該怎麼打電話。你不能真正解決安全方面(顯然)做別的事情,但也許this link會有所幫助。
你可以要求操作系統硬件設備的內存映射到你的程序的內存空間。一旦完成,您就可以從第3環中讀取和寫入該內存。無論是否可以這樣做,或者如何實現,都取決於操作系統或設備。
; set PE bit
mov cr0, eax
or eax, 1
mov eax, cr0
; far jump (cs = selector of code segment)
jmp cs:@pm
@pm:
; Now we are in PM
來自維基百科。
基本思路是設置(至1)位cr0控制寄存器。
但是,如果你已經在保護模式下(即您在Windows/Linux)的,安全限制你做它(你是在環3 - 最低的信任)。
因此成爲第一個進入保護模式。
感謝您的回答。我讀了作者寫道的頁面:「我們讀全局描述符表並在第一個空閒位置+所需的環級寫回我們的函數的地址。」如果他打算說我們寫信給GDT或其他地方,我沒有得到。我們可以從用戶模式寫入GDT(環3)嗎? – yaami 2011-01-08 04:04:03