![程序如何检测到 Ubuntu 正在作为虚拟机运行?](https://linux22.com/image/916397/%E7%A8%8B%E5%BA%8F%E5%A6%82%E4%BD%95%E6%A3%80%E6%B5%8B%E5%88%B0%20Ubuntu%20%E6%AD%A3%E5%9C%A8%E4%BD%9C%E4%B8%BA%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我正在尝试通过 Ubuntu 16.04 作为 Virtualbox VM 运行一个程序。
该程序的二进制文件检查它是否在虚拟机上运行,并且在虚拟机上执行的操作与在给定计算机上执行的操作不同。
我如何知道二进制文件正在查询什么?我可以使用类似strace
或的东西ldd
来做到这一点吗?
我希望能够像在真实机器而不是虚拟机上一样运行二进制文件。我推测一定有办法更改二进制文件查询时 Ubuntu 16.04 所报告的内容。
答案1
人们和应用程序已经开始编写 dmidecode 解析、特殊指令处理 (vmware) 和其他代码。但这些代码经常会过时,无法再匹配新版本和虚拟化技术。
我认为,迄今为止最可靠的方法是依靠如今无处不在的 systemd,然后直接调用systemd-detect-virt
这样做的好处是显而易见的,许多 VM 和容器类型已经实现,您可以获得新 systemd 版本的更新,并且需要维护的自己的代码更少。