Windows Portable Executableは、マシンアーキテクチャ間で本当に移植可能ですか?もしそうなら、それはどのように機能しますか?そうでない場合、「Portable Executable」とはどういう意味ですか、または実行可能ファイルのどの部分が移植可能ですか?
ありがとう、Siva Chandran
Windows Portable Executableは、マシンアーキテクチャ間で本当に移植可能ですか?もしそうなら、それはどのように機能しますか?そうでない場合、「Portable Executable」とはどういう意味ですか、または実行可能ファイルのどの部分が移植可能ですか?
ありがとう、Siva Chandran
実行可能ファイル自体は移植性がありません。PE形式は、異なるアーキテクチャの実行可能ファイルが同じPE形式を使用するという意味で「ポータブル」ですが、PEファイル内の実行可能コードは単一のプロセッサアーキテクチャに固有です。
実際には、これは、同じコンパイラとリンカーコードの多くを異なるアーキテクチャで再利用できること、および実行可能ファイルを調べるためのツールが(ある程度)「外部」実行可能ファイルで機能できることを意味します。
(ここではネイティブ実行可能ファイルについて話しています。.NETアセンブリもPE形式を使用しており、真に移植可能です。)
ウィキペディアから:「「ポータブル」という用語は、オペレーティングシステムソフトウェアアーキテクチャのさまざまな環境におけるフォーマットの多様性を指します。」
さて、それは、フォーマットがさまざまなプラットフォームで実行可能ファイルに使用できるという意味で移植可能です(SkyOSはELFに切り替える前にそれを使用していました)。プラットフォームに依存しないコードを使用したり、あるOSでPEファイルを作成した場合に別のOSで実行したりすることはできません。
PEファイルは、バイナリアプリケーションデータの単なるコンテナです。さまざまなCPUアーキテクチャ(または.Netなどの非CPUソフトウェアアーキテクチャ)をターゲットにすることができます。それが「ポータブル」と呼ばれる理由です。
ただし、それらに含まれる各バイナリアプリケーションイメージは、1つのアーキテクチャにのみ適しています。