如何在该环(-1,0,1,2,3)我正在运行?

编程方式检测
有帮助吗?

解决方案

最简单的方法是,只运行(x86)的命令和捕捉相应的错误。

E.g。 (SEH,视窗,内核模式)

bool ring_lower_0 = false;
__try
{
    __asm { <cmd> };
    ring_lower_0 = true;
}
__except( GetExceptionCode() == EXCEPTION_PRIV_INSTRUCTION )
{
    ring_lower_0 = false;
}

注意:

CMD,是一种汇编命令。请参阅英特尔体系结构参考手册命令和它们各自的环级别的列表。

Linux有一个稍微不同的概念。

但要记住,虚拟机驻留在一个较低的水平可以通过模拟呼叫掩蔽的结果。

(NB:虚拟机的工作是到无效指令翻译成一个有意义的呼叫)


如果你真要查,如果你的虚拟化,并要停止,因为这样执行,你应该读什么人都写了“红药”。

其他提示

除非你是一个设备驱动程序,你永远在环3被运行(系统有“戒指”,本身)。

通常我会写,你应该阅读有关“保护模式编程”。有一个关于如何使用Windows XP SP2环0 intertact的文章。请注意,它会为别人Windows版本和肯定其他业务系统发生改变。

http://www.codeproject.com/KB/threads/MinimalisticRingZero.aspx

如果你只是想,如果你在虚拟机内部运行的检测,以避免人们调试应用程序,例如,你可以点击这里:

http://www.codeproject.com/KB/system/VmDetect.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top