我正在尝试通过 Ubuntu 16.04 作为 Virtualbox VM 运行一个程序。
该程序的二进制文件检查它是否在虚拟机上运行,并且在虚拟机上执行的操作与在给定计算机上执行的操作不同。
我如何知道二进制文件正在查询什么?我可以使用类似strace
或的东西ldd
来做到这一点吗?
我希望能够像在真实机器而不是虚拟机上一样运行二进制文件。我推测一定有办法更改二进制文件查询时 Ubuntu 16.04 所报告的内容。
答案1
人们和应用程序已经开始编写 dmidecode 解析、特殊指令处理 (vmware) 和其他代码。但这些代码经常会过时,无法再匹配新版本和虚拟化技术。
我认为,迄今为止最可靠的方法是依靠如今无处不在的 systemd,然后直接调用systemd-detect-virt
这样做的好处是显而易见的,许多 VM 和容器类型已经实现,您可以获得新 systemd 版本的更新,并且需要维护的自己的代码更少。