2013-08-18 36 views
0

我想在用戶空間應用程序中使用monitormwait指令。不幸的是,它們是僅可由環0執行的特權指令。在Linux應用程序中升級到Ring 0

我的應用程序具有root訪問權限。我怎樣才能提高權限振鈴0?

我已經考慮過將它們作爲系統調用添加的內核模塊,但這會破壞我需要的性能改進。

編譯自定義內核是一個選項。我不知道在信號源的哪個位置可以找到切換到環0的位置,也不知道它是否會對例如虛擬內存。

任何想法?

回答

0

從標準linux內核的用戶空間中獲取ring0是不可能的。最好編寫一個內核模塊來做你認爲自己想要的東西。但是如果你真的想在用戶空間有一個ring0,我會給你一個起點。

x86處理器存儲當前權限級別cs寄存器的兩個最低有效位中。

當創建新線程時,Linux內核會檢查此線程是用戶線程還是內核線程,併爲此任務存儲適當的cs值。 (證明:copy_thread()arch/x86/kernel/process_32.c)。

所以,你能夠獲得指針寄存器任務與task_pt_regs()arch/x86/include/asm/processor.h)宏和改變cs到環與regs->cs &= ~0x3;或類似的東西設置爲0

但是,我強烈建議你,不要這樣做。