2

RDTSC 命令が使用可能かどうかを確認したい。Intel Pentium 以降のプロセッサが必要で、レジスタ CR4 の TSD フラグがクリアされているか、セットされていて CPL が 0 に等しい必要があります。

したがって、現在の特権レベル (CS セグメント レジスタのビット 0 と 1) を取得するのに問題はありません。また、命令自体がサポートされているか (CPUID.1:EDX[4] = 1) を確認しても問題ありません。

しかし (それが問題です)、これはユーザーモード (PL3) でも実行する必要があります。しかし、ユーザーモードで制御レジスタ CR4 を読み取ることができません。

オペレーティング システムがタイムスタンプ カウンターへのアクセスを制限しているかどうかを確認する他の方法はありますか?

4

1 に答える 1

2

唯一の方法は、命令を「試行」して例外をインターセプトすることです。ただし、オペレーティング システムが安全な方法でイベントに反応し、状態を回復してプログラムを続行できるようにしている場合に限ります。残念ながら、すべての OS が「致命的」と見なす例外の後に続行できるわけではありません。Windows では、構造化された例外処理を試すことができます。Linux では、特定のシグナル (特に SIGILL) があります。しかし、他の OS はこの種の例外を許しません。さよなら

(編集)

PS: 原則として、OS が例外を傍受して命令をシミュレートすることも可能であるため、アプリケーションは命令が実際に使用可能かどうかを判断できません。このことを行う OS があるかどうかはわかりません (仮想マシンかな?)。さよなら!

于 2011-03-30T16:09:56.657 に答える