我需要检测我的应用程序是否在虚拟化的操作系统实例中运行。 我find了一些有关这个主题的有用信息。 同样的文章出现在多个地方,我不确定原始的来源。 VMware执行特定的无效x86指令来返回关于它自己的信息,而VirtualPC使用带有IN指令的幻数和I / O端口。 这是可行的,但在两种情况下似乎都是无证的行为。 我猜想未来的VMWare或VirtualPC可能会改变这个机制。 有没有更好的办法? 有没有支持两种产品的机制? 同样,有没有办法检测Xen或VirtualBox ? 我不关心这个平台故意要隐藏自己的情况。 例如,蜜jar使用虚拟化,但有时会掩盖恶意软件用来检测它的机制。 我不在乎我的应用程序会认为它在这些蜜jar中没有被虚拟化,我只是在寻找一个“尽力而为”的解决scheme。 该应用程序主要是Java,但我期望使用本机代码加上JNI这个特定的function。 Windows XP / Vista的支持是最重要的,尽pipe在引用文章中描述的机制是x86的通用function,并不依赖于任何特定的操作系统设施。