事前に: これは私が今夜思いついた厄介なアイデアです :-)
次のシナリオについて考えてみてください。
いくつかの arm-elf 実行可能ファイルがあり、何らかの理由でそれをエミュレートせずに amd64 ボックスで実行したいとします。シナリオを単純化するために、libc にリンクされているだけの単純なコンソール アプリケーションを扱いたいだけで、追加のアーキテクチャ固有の要件はないとします。
異なるアーキテクチャ間でバイナリを変換する場合は、次の点を考慮する必要があります。
- アーキテクチャのエンディアン
- レジスタのビット幅
- 異なるレジスタの機能
エンディアンは、それほど問題にならないものの 1 つです。デスティネーション レジスタのビット幅がソース アーキテクチャのビット幅よりも小さい場合、追加の命令を挿入して同じ動作を表すことができます。同じことがレジスタの機能にも当てはまります。
最後に (そしてこの考えを打ち破る前に)、次の簡単なコード スニペットとそれに対応するオブジェクトの分解を見てください。
私の意見では、これらのオブジェクトを異なるアーキテクチャ間で変換できるはずです。関数呼び出し (printf など) でさえ、目的のアーキテクチャの libc にマップまたはラップできます。
そして今、私の質問: 誰かがこれを実現することをすでに考えていましたか?
それは実際に可能ですか?
この問題を扱っているプロジェクトはすでにいくつかありますか?
前もって感謝します!