一部のWSL2インストールでelf実行可能ファイル、win実行可能ファイル、またはその両方を許可するのはなぜですか?

一部のWSL2インストールでelf実行可能ファイル、win実行可能ファイル、またはその両方を許可するのはなぜですか?

私は何が起こっているのかを理解しようとしています。以下を観察しました。

  • Windows 10でコンパイルされたexeバイナリ
  • CentOS7でコンパイルされたelfバイナリmusl
  • ユーザー1 WSL2:(elf binary runs, exe binary runs更新済み)
  • ユーザー 2 WSL2:elf binary error, exe binary runs (surprised #1)
  • ユーザー3 WSL2:elf binary runs, exe binary runs (surprised #2)

これらのエラーは、プログラムの競合ではなく、オペレーティングシステムの実行可能なフォーマットエラーです。

新しいコンピュータでユーザー1の経験を再現できますが、他のユーザーがなぜそのような経験をするのかはわかりません。画面共有を通じて、彼らが何を観察しているかを確認しました。

編集次のセッションでユーザーの詳細を理解できるようになると、WSLはさまざまな種類の実行可能ファイルの実行の互換性と時間の経過とともに変更する方法に関するいくつかの情報を助けることができます。 https://stackoverflow.com/questions/38920710/how-can-i-run-a-windows-executable-from-wsl-ubuntu-bash

編集次回ユーザーに会うときに、より多くの情報を収集する予定です。例:

  • Windowsのバージョン
  • WSLバージョン
  • 端末シェル/端末呼び出し方法

ベストアンサー1

これは完全な答えではありませんが、より多くの情報を収集した場合は、これについてもう一度言及します。

ところで、今、elfとWindows(PE)バイナリの両方が実行されているユーザー#2のケースについて驚いたと言われました。

しかし、これはWSLの場合は「通常」です。 WSLは、フルネーム(拡張名を含む)が指定されている限り、Windowsバイナリの実行を許可します.exe。たとえば、notepad.exeWSLで実行すると、ほぼ常にデフォルト設定を使用できます。

これは、init中にLinuxにPEフォーマットを登録することによって行われますbinfmt_misc。でこれを確認できますcat /proc/sys/fs/binfmt_misc/WSLInterop。 (とにかく私にとって興味深いTILに関する注意事項は、Windowsバイナリ用の4d5aを指定するマジックバイトが元のDOS PE形式に由来していたことです。建築家。

ちなみにこのサポートはできるさまざまな方法で無効にできるため、ユーザーがWindowsバイナリを実行できない場合は、上記cat /proc/sys/fs/binfmt_misc/WSLInteropの結果を確認してください。

また、あなたが言ったように、WSLのバージョンと実行可能ファイルに関する詳細情報を確認してください。実行可能ファイルは32ビットまたは64ビットアーキテクチャ用にコンパイルされますか?私の記憶が正しい場合、WSL1は64ビットバイナリのみを実行できますが、WSL2は両方とも実行できます。

おすすめ記事