2015-09-11 88 views
1

我有英特爾i5處理器和Windows 7操作系統。我正在試圖瞭解更多關於它的系統。我意識到我無法訪問處理器的特權指令。例如,我無法寫入型號專用寄存器和類似於下面的代碼無法執行執行特權指令

.model flat,stdcall 
.stack 4096 

.code 
main proc 

    xor eax,eax 
    xor edx,edx 
    mov ecx,176h 
    wrmsr 

main endp 
end main 

有編寫應用程序,可以使完全利用處理器和系統的所有指令,而無需編寫方式Windows設備驅動程序?

P.S:我不介意在系統崩潰或文件系統損壞

+3

在虛擬機內...沒有任何操作系統在你上面。 –

回答

-3

我假設你知道什麼是特權指令,它只能在ring 0 sofrware的最特權級執行。而第二個假設是要與操作系統不一定窗戶這是不開源的操作系統好學習OS有可用的代碼打

你有一些選項嘗試:

寫的Linux模塊轉換到特權級別並在那裏執行特權操作。

爲特定目的實現您自己的系統調用。

使用仿真器bochs,qemu simic等來測試你的代碼,並付出額外的努力。

+0

我同時使用Windows和Linux,但坦率地說每次有人說「_this_比_that_好」我無法幫助,我必須問......「爲什麼?在哪種意義上?做什麼?在哪種情況下?」。順便說一句,他用[標籤:Windows]標記了他的問題,他說他會避免編寫內核的東西...我不會建議他編寫一個** Linux內核模塊... –

+0

@AdrianoRepetti GNU/Linux在許多方面比Windows更好。爲了*我自己的*個人使用的目的,我會說它*更好。不過,我完全同意你的看法,即沒有限定符這樣做是愚蠢的,而且這不是一個有用的答案。 –

+0

我非常確定,由於代碼的可用性,Linux在理解操作系統原語方面要好得多,而且大多數操作系統的書籍都是針對unix內核編寫的。至於回答問題,我很確定要求開始他的操作系統的人,否則他不應該問這個問題,所以我嘗試回答以各種方式指導他。你們兩個投了票,然後PLZ引導提問者以及更好的方式,尤其是通過使用窗口 – shami

4

最好的辦法是在虛擬機內玩這個東西。如果你確實得到了一個特權指令來以某種方式運行,無論是從設備驅動程序還是其他在環0中執行的環境中,你都可能會鎖定系統或者更糟。 (更糟糕=損壞磁盤上的文件系統)。

如果你希望你的代碼運行在長模式而不是16位實模式下,那麼可以從一個開源的玩具操作系統開始,並且在你的代碼初始化並切換到實模式之後立即開始。 memtest86 +是可啓動程序的一個例子,我認爲它是開源的。

您可能還想使用像GRUB這樣的引導加載程序來加載非Windows玩具操作系統。

你可能會想看看the OSdev wiki的教程和指南,通常只有操作系統才能完成的東西,不管你是否考慮用裸機程序來運行操作系統或不用操作系統。

當然,一旦你在像bochs這樣的模擬器中工作(它有一個內置的調試器,可以讓你單步執行你想要的任何代碼),你可能想要在真正的硬件上測試它。如果虛擬機中的grub可以加載它,那麼可以在真正的硬盤驅動器上進行grub。或者USB閃存驅動器上的syslinux意味着您不必擔心Windows安裝的引導加載程序。