Architecture 将ARM指令转换为i386指令

Architecture 将ARM指令转换为i386指令,architecture,x86,arm,Architecture,X86,Arm,i386指令转换器是否有ARM指令可用?我真的很怀疑。差异太大,无法实现自动化。您可以在x86上模拟ARM指令。 它基本上是beta版,但其想法是为二进制文件编写llvm前端,这样llvm后端就可以为任何受支持的平台生成代码。有一款ARMv6前端正在积极开发中,我相信他们会希望得到帮助。目标是在任何受支持的体系结构之间支持仿真和静态重新编译。您可以将ARM代码反向工程为C,然后简单地编译C代码。 实际上从汇编程序中生成了相当好的代码C代码。(我从未使用过他们的产品,但我熟悉该公司背后的研究)。模

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

我真的很怀疑。差异太大,无法实现自动化。

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


它基本上是beta版,但其想法是为二进制文件编写llvm前端,这样llvm后端就可以为任何受支持的平台生成代码。有一款ARMv6前端正在积极开发中,我相信他们会希望得到帮助。目标是在任何受支持的体系结构之间支持仿真和静态重新编译。

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

模拟或静态二进制翻译是我会采取的方法,每种方法都有其优缺点


你需要更清楚地知道你在问什么。将一个指令集简单地转换为另一个指令集是一回事,要使结果有用,最困难的部分是您要处理的内容。ARM的内存和寄存器空间将与X86不匹配,因此直接指令对指令(模拟或sbt)是不够的,您必须添加代码,用检查地址、确定地址和模拟外围设备(模拟或sbt)的内容替换许多加载和存储最简单的方法是使用“软件动态翻译”。您可以在此处找到有关该技术的一些信息:

它通过动态转换“基本块”来工作,您可以将所有指令转换到一个控制点(分支、调用、跳转),然后将分支目标处的代码替换为回调用转换器的存根。它大致相当于CLR中的“JIT编译”,只是它工作在更细粒度的级别(基本块而不是方法)。与静态转换方法相比,它具有优势,因为它不依赖于精确的反汇编。获得完美的拆卸是不可能的(这相当于停止问题)。即使是像IDA pro这样真正优秀的反汇编程序,也可能在识别异常处理程序之类的东西时遇到问题,并且常常将代码与数据混淆


然而,软件动态翻译不受任何这些限制。它甚至可以(理论上)使用适当的内存保护技术处理自我修改的代码。

微软提供了设备仿真器,它正是这样做的。
第一个版本甚至还附带了源代码:

您想实现什么?您是想运行一些您已经获得的代码吗(在这种情况下,仿真器很好)或者,您是否正在尝试转换一些从以前的开发人员那里继承的代码,而您没有获得源代码?虽然使用自定义编译器(从ARM到IR到x86)从ARM到x86指令的转换在技术上是可能的,但还有其他更主要的障碍,这是一个完全不同的操作系统和运行时库,应用程序设计用于与之通信,而与指令转换无关。为x86和目标操作系统重新编译应用程序更容易。它们比ANSI C和x86更接近,但是有很多程序可以自动进行转换。一点也不。ANSI C设计用于编译成各种汇编语言。C中的许多高级(相对)概念可以在不同的汇编程序中以多种不同的方式表示。然而,汇编程序之间的情况就不同了。这个链接断了。啊,显然file.io只需下载一次就可以删除。另一种尝试: