是的,我知道,周围有一些类似的问题,但没有一个是令人满意的
我知道这是一个愚蠢的想法,但我需要使用我的 Visual Studio 2015 C++-Project 进入内核模式(又名 Ring 0)。
我还想用最少的努力来完成它(意思是,我不想创建一个专门用于测试的驱动程序,并且在每次构建后都必须签名和重新部署,因为这非常乏味)。
我怎样才能做到这一点?
对我来说,项目是在我的主机上还是在远程(或虚拟机)上运行并不重要——我有足够的机器可供使用。
背景:我目前正在研究Cosmos 操作系统,我需要测试需要 Ring 0“特权”的 X86 汇编指令,例如
rdmsr
,out
等in
。运行以下代码将在第 8 行中断并出现
0xC0000096: Privileged instruction.
-Error:
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
}
....
是的,我完全意识到我正在承担的任何风险,所以请不要问,为什么我需要做这样的事情,或者我是否想获得程序员的达尔文奖;)