程序如何检测到 Ubuntu 正在作为虚拟机运行?

程序如何检测到 Ubuntu 正在作为虚拟机运行?

我正在尝试通过 Ubuntu 16.04 作为 Virtualbox VM 运行一个程序。

该程序的二进制文件检查它是否在虚拟机上运行,​​并且在虚拟机上执行的操作与在给定计算机上执行的操作不同。

我如何知道二进制文件正在查询什么?我可以使用类似strace或的东西ldd来做到这一点吗?

我希望能够像在真实机器而不是虚拟机上一样运行二进制文件。我推测一定有办法更改二进制文件查询时 Ubuntu 16.04 所报告的内容。

答案1

人们和应用程序已经开始编写 dmidecode 解析、特殊指令处理 (vmware) 和其他代码。但这些代码经常会过时,无法再匹配新版本和虚拟化技术。

我认为,迄今为止最可靠的方法是依靠如今无处不在的 systemd,然后直接调用systemd-detect-virt

这样做的好处是显而易见的,许多 VM 和容器类型已经实现,您可以获得新 systemd 版本的更新,并且需要维护的自己的代码更少。

相关内容