在不同体系结构之间转换可执行文件,对象或二进制文件

时间:2013-11-13 16:12:36

标签: c assembly architecture compiler-construction disassembly

事先:这只是我今晚的一个令人讨厌的想法: - )

考虑以下情况:

你有一些arm-elf可执行文件,出于某些原因你想在amd64框上运行它而不进行模拟。 为了简化场景,假设我们只想处理与libc链接的简单控制台应用程序,并且没有其他架构特定要求。

如果要在不同体系结构之间转换二进制文件,则必须考虑以下几点:

  • 架构的结束
  • 寄存器的位宽
  • 不同寄存器的功能

Endianess应该是较小的问题之一。 如果目标寄存器的位宽小于源架构的位宽,则可以插入额外的指令来表示相同的行为。这同样适用于寄存器的功能。

最后,(在抨击这个想法之前),看看下面的简单代码片段以及相应的对象反汇编。

C Code

Corresponding ARM Disassembly

Corresponding AMD64 Disassembly

在我看来,应该可以在不同架构之间转换这些对象。甚至函数调用(如printf)也可以映射或包装到目标体系结构的libc。

现在我的问题: 有没有人考虑过要实现这个目标?

实际上可能吗?

是否已有一些项目处理此问题?

提前致谢!

0 个答案:

没有答案