1

はい、似たような質問がいくつかあることは知っていますが、どれも満足のいくものではありません

ばかげた考えであることはわかっていますが、Visual Studio 2015 C++ プロジェクトでカーネル モード (リング 0) に入る必要があります。
また、必要な最小限の労力でそれを実行したいと考えています (つまり、テスト専用のドライバーを作成し、ビルドのたびに署名して再デプロイするのは非常に面倒なので、やりたくないということです)。

どうすればこれを達成できますか?

プロジェクトがホスト マシンで実行されているか、リモート マシン (または仮想マシン) で実行されているかは問題ではありません。十分な数のマシンを自由に使用できます。


背景:私は現在Cosmos オペレーティング システムに取り組んでおり、 Ring 0 の "特権"rdmsrを必要とする X86 アセンブリ命令 ( など) をテストする必要があります。 次のコードを実行すると、8 行目でエラーが発生します。outin
0xC0000096: 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
}

....

そして、はい、私は自分が取っているリスクを十分に認識しているので、なぜ私がそのようなことをする必要があるのか​​ 、またはプログラマーのダーウィン賞を獲得しようとしているのかどうかを尋ねないでください ;)

4

1 に答える 1

1

私の知る限り、Visual Studio はカーネル コードをデバッグできませんが、WinDbgKDを実行できる他のデバッガーがあります。それらを理解するには時間がかかりますが、他に方法はありません。

于 2016-09-19T10:48:01.307 に答える