为什么我不能在应用程序中转换架构?

时间:2013-12-28 19:51:52

标签: assembly architecture

在x32计算机上运行的应用程序具有仅在x32计算机上运行的汇编程序命令。 ARM机器有其他命令。为什么我不能从应用程序转换“汇编程序命令”以使其在其他架构上运行?

1 个答案:

答案 0 :(得分:3)

从理论上讲,这很简单:任何Turing-complete系统都可以计算任何其他图灵完备系统所能做的任何事情。在实践中,它要复杂得多。

最重要的是软件环境。几乎所有的程序都假设它将与提供各种功能的操作系统进行交互:抽象出硬件访问的细节,将程序与运行在同一台机器上的其他程序隔离,提供公共代码库等等。上。将程序翻译成新指令集后,仍需提供支持软件。

另一个主要是硬件。计算机不仅仅是一个CPU,程序对其他部分做出明确或隐含的某些假设。例如,the order in which bytes are put together into larger datatypes会有所不同,执行位级操作的程序如果从big-endian机器转到little-endian机器会有麻烦,反之亦然。对内存访问也有限制,例如。目标系统可能要求内存读取为aligned on a multiple of four bytes,而原始系统没有此类要求。还有更微妙的问题,例如,x86 FPU对所有浮点计算使用80位精度,即使在精度较低的数字上也是如此。在具有64位FPU的系统上,依赖于额外内部精度的程序将失败。

x86架构特别具有使转换程序变得困难的功能:指令的大小和对齐方式各不相同。这意味着在一般情况下,您不能查看程序并立即告诉它包含哪些指令。假设和实际指令对齐之间的一个字节的转换,例如您可能在反盗版陷阱或紧凑编码演示中发现,可能意味着程序的功能发生了巨大的变化。

有些程序可以让您将程序从一个体系结构转换为另一个体系结构,但它们通常使用dynamic recompilation在程序运行时重新编写程序,或者它们完全模拟原始系统,重新解释每个程序它的执行指令。在任何一种情况下,用户都需要为程序提供运行的软件环境。