假设任何x86编译的应用程序总是在x64版本下运行是否安全?

时间:2015-10-21 06:13:53

标签: c++ linux windows unix x86-emulation

是否可以安全地假设任何 x86编译的应用总是在运行应用程序的相同操作系统的x64版本下运行 < / p>

据我所知,对于 Windows操作系统 ,答案是 “是” Windows x86仿真层 是为同一目的而构建的。但是,我只想在这里向专家 再次确认

Unix Linux 怎么样?是否有 警告

2 个答案:

答案 0 :(得分:4)

不,要运行x86代码,需要在兼容性或传统模式下运行。如果操作系统不支持在兼容模式下运行进程,则程序很可能无法运行。

Linux和IFAIK Windows目前支持兼容模式,看起来很多人也支持它,或多或少。我的理解是,NETBSD需要一个特殊的模块来支持这一点,所以它不一定要特别小心它将得到支持,并且它表明存在操作系统的可能性很大。可能性已完全丧失。

此外,还有可能在未来打破向后兼容性,因为虚拟x86模式不再可用于长模式,因此已经在CPU上发生了这种情况。在64位Windows或Linux下再运行16位程序。

也可能发生在操作系统方面,开发人员可能决定不再支持兼容模式了。请注意,这也可能已经发生,因为可能首先切换到传统模式来支持虚拟x86模式,但如果可能的话,似乎没有人愿意这样做。同样,Windows或Linux开发人员似乎都没有考虑在64位内核中以遗留模式运行内核代码的实现可能性。

前两节表明,未来或甚至目前的迹象可能并非总是可行。

此外,由于这是一个C ++问题,你不得不问自己为什么要做出这样的假设?如果写得好,你的代码应该可以编译为64位模式 - 因为你还没有依赖特定宽度的数据类型,对吗?

答案 1 :(得分:2)

没有。我们有一大堆Debian服务器错过了Multi-Arch i386(32位)库。在Windows Server Core上,WoW64(32位子系统)是可选的。因此,对于Linux和Windows,已知有64位系统无法运行x86可执行文件。