0

事前に: これは私が今夜思いついた厄介なアイデアです :-)

次のシナリオについて考えてみてください。

いくつかの arm-elf 実行可能ファイルがあり、何らかの理由でそれをエミュレートせずに amd64 ボックスで実行したいとします。シナリオを単純化するために、libc にリンクされているだけの単純なコンソール アプリケーションを扱いたいだけで、追加のアーキテクチャ固有の要件はないとします。

異なるアーキテクチャ間でバイナリを変換する場合は、次の点を考慮する必要があります。

  • アーキテクチャのエンディアン
  • レジスタのビット幅
  • 異なるレジスタの機能

エンディアンは、それほど問題にならないものの 1 つです。デスティネーション レジスタのビット幅がソース アーキテクチャのビット幅よりも小さい場合、追加の命令を挿入して同じ動作を表すことができます。同じことがレジスタの機能にも当てはまります。

最後に (そしてこの考えを打ち破る前に)、次の簡単なコード スニペットとそれに対応するオブジェクトの分解を見てください。

C コード

対応する ARM の逆アセンブル

AMD64分解対応

私の意見では、これらのオブジェクトを異なるアーキテクチャ間で変換できるはずです。関数呼び出し (printf など) でさえ、目的のアーキテクチャの libc にマップまたはラップできます。

そして今、私の質問: 誰かがこれを実現することをすでに考えていましたか?

それは実際に可能ですか?

この問題を扱っているプロジェクトはすでにいくつかありますか?

前もって感謝します!

4

0 に答える 0