0

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

考虑以下场景:

您有一些 arm-elf 可执行文件,出于某些原因,您想在 amd64 机器上运行它而不进行仿真。为了简化场景,假设我们只想处理简单的控制台应用程序,这些应用程序只是与 libc 链接,并且没有额外的体系结构特定要求。

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

  • 架构的字节序
  • 寄存器的位宽
  • 不同寄存器的功能

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

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

C代码

对应的ARM反汇编

对应AMD64反汇编

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

现在我的问题是:是否有人已经考虑过实现这一点?

真的有可能吗?

是否已经有一些项目处理这个问题?

提前致谢!

4

0 回答 0