事先:这只是我今晚的一个讨厌的想法:-)
考虑以下场景:
您有一些 arm-elf 可执行文件,出于某些原因,您想在 amd64 机器上运行它而不进行仿真。为了简化场景,假设我们只想处理简单的控制台应用程序,这些应用程序只是与 libc 链接,并且没有额外的体系结构特定要求。
如果要在不同架构之间转换二进制文件,则必须考虑以下几点:
- 架构的字节序
- 寄存器的位宽
- 不同寄存器的功能
Endianess 应该是较小的问题之一。如果目标寄存器的位宽小于源架构的位宽,则可以插入额外的指令来表示相同的行为。这同样适用于寄存器的功能。
最后,(在抨击这个想法之前),看看下面的简单代码片段及其对应的对象反汇编。
在我看来,应该可以在不同架构之间转换这些对象。甚至函数调用(如 printf)也可以映射或包装到目标架构的 libc。
现在我的问题是:是否有人已经考虑过实现这一点?
真的有可能吗?
是否已经有一些项目处理这个问题?
提前致谢!