2011-03-29 52 views
2

我要檢查,如果RDTSC指令是可用的。必須有一個Intel Pentium或更新的處理器,並且寄存器CR4中的TSD標誌清除或設置且CPL等於0.時間戳計數器限制

因此,獲得當前特權級別(位0和位1 CS段寄存器)。此外,檢查指令本身是否受支持也沒有問題(CPUID.1:EDX [4] = 1)。

但(這就是問題),這也必須在用戶模式(PL3)運行。但是,我無法在用戶模式下讀取控制寄存器CR4。

是否有任何其他的方法來檢查,如果操作系統不限制訪問時間戳計數器?

回答

2

的唯一方法是「試」的指令,並攔截例外,前提是該操作系統爲您提供了反應事件以安全的方式和恢復狀態,這樣你就可以繼續你的程序的能力。不幸的是,並非所有操作系統都允許在他們認爲是「致命」的異常之後繼續使用。在Windows上,你可以嘗試使用結構化的異常處理,在linux上有特定的信號(特別是SIGILL)。但其他操作系統不會原諒這種例外。 再見

(編輯)

PS:這也有可能,原則上,對於操作系統incercept異常,並模擬指令,以便應用程序沒有辦法決定,如果該指令是真的可用。我不知道是否有操作系統可以做這件事(虛擬機,也許?)。 再見!

+0

(+1),這似乎是唯一的解決辦法,我可以得到,太糟糕了。 – 0xbadf00d 2011-04-01 15:43:30