我想在用戶空間應用程序中使用monitor
和mwait
指令。不幸的是,它們是僅可由環0執行的特權指令。在Linux應用程序中升級到Ring 0
我的應用程序具有root訪問權限。我怎樣才能提高權限振鈴0?
我已經考慮過將它們作爲系統調用添加的內核模塊,但這會破壞我需要的性能改進。
編譯自定義內核是一個選項。我不知道在信號源的哪個位置可以找到切換到環0的位置,也不知道它是否會對例如虛擬內存。
任何想法?
我想在用戶空間應用程序中使用monitor
和mwait
指令。不幸的是,它們是僅可由環0執行的特權指令。在Linux應用程序中升級到Ring 0
我的應用程序具有root訪問權限。我怎樣才能提高權限振鈴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
。
但是,我強烈建議你,不要這樣做。