web-dev-qa-db-ja.com

LinuxでWindows exeが機能しないのはなぜですか?

私はではない方法について尋ねて、 Windows exeはLinuxで動作します。

[〜#〜]なぜ[〜#〜]機能しないのですか?.

Windowsが実行可能ファイルを実行する方法とLinuxが実行可能ファイルを実行する方法の違いは何ですか?なぜ違う必要があるのですか?その上、なぜLinux実行可能ファイルにファイル拡張子がないのですか?

29
Nav

LinuxとWindowsの実行可能ファイルは異なる形式を使用します。 Linuxは [〜#〜] elf [〜#〜] 形式をほとんどのアーキテクチャで使用しますが、Windowsは [〜#〜] pe [〜#〜] 形式を使用します。 ELFはLinuxが共有ライブラリを管理する方法に適し、PEはWindowsが共有ライブラリを管理する方法に適していますが、LinuxがPE実行可能ファイルまたはWindows ELF実行可能ファイルを実行できなかった根本的な理由はありません。実際、Linuxワイン を通じてPE実行可能ファイルを実行できます

問題は、WindowsとLinuxで完全に異なる API であり、カーネルインターフェイスとライブラリセットが異なることです。したがって、実際にWindowsアプリケーションを実行するには、Linuxはアプリケーションが行うすべてのAPI呼び出しをエミュレートする必要があります。それは大変な作業です。 Wineはある程度それを行いますが、特にWindowsのメーカーが協力しないので、それは非常に困難です。たとえば、母国語が中国語の場合に英語を学習する場合と比較できます。実行可能形式はアルファベット(習得するのはそれほど難しくありません)、APIは語彙です(文学を読み始めることができるレベルになるまでには何年もかかります) )。

Windowsバイナリには [〜#〜] abi [〜#〜] があり、Linuxバイナリとは異なる [〜#〜] api [〜#〜] を使用しています。

* nixは拡張機能の代わりに実行可能ファイルを識別するために permission bits を使用するため、Linuxバイナリは拡張機能を必要としません。

これはプログラマーから素人の言葉で説明された窓側を私が聞いた方法です。

Windowsでは、プログラムにフックがあり、Exeがそれを呼び出すOSはLinuxにはありません。両方の環境の違いのため。最初にLinuxは権限を探し、Windowsはまず拡張子を調べてプロパティを調べ、次にExeファイル内を調べることなどによって、リンク可能な形式を探します。

Linuxで開始し、ワインIMHOを使用せずにWindows環境で実行するように変更されたNetbackupのようなアプリケーションがあり、それらは頻繁に最も安定したWindowsアプリの動作の一部です。

Windowsアプリの場合。通常は手に負えない状態になります。これは、アプリケーションによって保持されているフックの一部が完全に解放されておらず、Windowsがそれらをフックと見なしているためです(メモリリーク)。 Windowsがその解放されていないメモリ領域を別のアプリケーションに渡すと、クラッシュして書き込みます。

0
Bill