C++ 使用C+输入环0+;使用VisualStudio15

C++ 使用C+输入环0+;使用VisualStudio15,c++,visual-studio,kernel-mode,C++,Visual Studio,Kernel Mode,是的,我知道,有一些类似的问题,但没有一个是令人满意的 我知道这是一个愚蠢的想法,但我需要用我的Visual Studio 2015 C++项目进入内核模式(也称为Ring 0)。 我还希望尽可能少地完成这项工作(也就是说,我不想创建一个专门用于测试的驱动程序,并且在每次构建之后都必须进行签名和重新部署,因为这非常繁琐) 我怎样才能做到这一点 无论项目是在我的主机上运行,还是在远程主机(或虚拟机)上运行,对我来说都无关紧要——我有足够的机器供我使用。 背景:我目前正在处理,我需要测试需要环0“

是的,我知道,有一些类似的问题,但没有一个是令人满意的

我知道这是一个愚蠢的想法,但我需要用我的Visual Studio 2015 C++项目进入内核模式(也称为Ring 0)。
我还希望尽可能少地完成这项工作(也就是说,我不想创建一个专门用于测试的驱动程序,并且在每次构建之后都必须进行签名和重新部署,因为这非常繁琐)

我怎样才能做到这一点

无论项目是在我的主机上运行,还是在远程主机(或虚拟机)上运行,对我来说都无关紧要——我有足够的机器供我使用。
背景:我目前正在处理,我需要测试需要环0“特权”的X86汇编指令,例如
rdmsr
out
in

运行以下代码将在第8行中断,出现
0xC0000096:特权指令。
-错误:

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
}

....


是的,我完全意识到我所冒的任何风险,所以请不要问,我为什么需要做这样的事情,或者我是否正在努力获得程序员达尔文奖;)

AFAIK Visual Studio无法调试内核代码,但还有其他调试器可以:和。您需要一些时间来解决这些问题,但没有其他方法。

如果您可以在不使用设备驱动程序的情况下进入环0,则操作系统中存在一个需要修复的重大安全漏洞。@jcoder:这是一个非常好的观点,但我希望避免编写和部署设备驱动程序的麻烦;)您也许可以编写一个驱动程序,输入环0,然后调用传递给它的代码。高度不安全。。。但是你只需要安装一次驱动程序。@jcoder:这是个好主意。。。。我将尝试写内核模式驱动程序(.sys文件)是一种很难工作的东西。即使在您成功地让编译器构建它之后,64位系统也需要您对驱动程序进行签名(您可能会使用您自己创建的证书并将其作为受信任的证书添加到Windows中),即使在这之后,您也需要以特殊的“开发人员模式”启动Windows,在桌面上放置水印,除非您可以访问来自Microsoft信任的实体的证书。在你完成所有这些之后,我觉得jcoder的想法不错。