将ARM指令转换为i386指令

时间:2010-05-28 09:57:33

标签: architecture x86 arm

是否有可用于i386指令转换器的ARM指令?

7 个答案:

答案 0 :(得分:11)

您可以使用QEMU在x86上模拟ARM指令。

答案 1 :(得分:2)

您可以将ARM代码反向工程为C,然后简单地编译C代码。 This company实际上从汇编程序生成了相当不错的代码C代码。 (我从未使用过他们的产品,但我熟悉该公司背后的研究。)

答案 2 :(得分:1)

仿真或静态二进制翻译是我将采取的路径,每个都有其优点和缺点。

你需要更清楚你要问的是什么。将一个指令集简单地转换为另一个指令集是一回事,使得结果有用的更难的部分就是你要解决的问题。您的ARM的内存和寄存器空间将与X86不匹配,因此直接指令(模拟或sbt)是不够的,您必须添加代码来替换许多加载和存储,检查地址,确定什么它正在解决,并模仿该外围设备(模拟或sbt)。

答案 3 :(得分:0)

我真的很怀疑。有太多差异使其自动化。

答案 4 :(得分:0)

http://www.libcpu.org/

它处于测试阶段,但其目的是为二进制文件编写llvm前端,以便llvm后端可以为任何支持的平台生成代码。 ARMv6前端正在积极开发中,我相信他们希望得到它的帮助。目标是支持任何支持的体系结构之间的仿真和静态重新编译。

答案 5 :(得分:0)

最简单的方法是使用名为“软件动态翻译”的东西。您可以在此处找到有关该技术的一些信息:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.120.5182&rep=rep1&type=pdf

它的工作原理是动态转换“基本块”,将所有指令转换为控制点(分支,调用,跳转),然后用分支目标替换回调到转换器的存根。它大致相当于CLR中的“JIT编译”,除了它在更细粒度的层次上工作(基本块而不是方法)。它比静态转换方法更有优势,因为它不依赖于精确的拆卸。获取完美的拆卸是不可能的(它等同于停止问题)。即使是非常好的反汇编程序,比如IDA pro,也可能在识别异常处理程序等问题时遇到问题,并且经常会将代码与数据混淆。

但是,软件动态转换不受任何这些限制的约束。它甚至可以(理论上)使用适当的内存保护技术处理自修改代码。

答案 6 :(得分:0)

microsoft提供了设备模拟器,它就是这样做的。 第一个版本甚至带有源代码:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=10865