はい、似たような質問がいくつかあることは知っていますが、どれも満足のいくものではありません
ばかげた考えであることはわかっていますが、Visual Studio 2015 C++ プロジェクトでカーネル モード (リング 0) に入る必要があります。
また、必要な最小限の労力でそれを実行したいと考えています (つまり、テスト専用のドライバーを作成し、ビルドのたびに署名して再デプロイするのは非常に面倒なので、やりたくないということです)。
どうすればこれを達成できますか?
プロジェクトがホスト マシンで実行されているか、リモート マシン (または仮想マシン) で実行されているかは問題ではありません。十分な数のマシンを自由に使用できます。
背景:私は現在Cosmos オペレーティング システムに取り組んでおり、 Ring 0 の "特権"
rdmsrを必要とする X86 アセンブリ命令 ( など) をテストする必要があります。
次のコードを実行すると、8 行目でエラーが発生します。outin0xC0000096: Privileged instruction.
int* ptr = new int[4];
int* va = ptr;
__asm
{
lea esi, va
mov ecx, 0xe7
rdmsr //error, as this must run in ring0
mov [esi + 4], eax
mov [esi], edx
mov ecx, 0xe8
rdmsr
mov [esi + 12], eax
mov [esi + 8], edx
xor eax, eax
}
....
そして、はい、私は自分が取っているリスクを十分に認識しているので、なぜ私がそのようなことをする必要があるのか 、またはプログラマーのダーウィン賞を獲得しようとしているのかどうかを尋ねないでください ;)