2009-12-12 11 views
11

UNIXではCOFF実行ファイルを、WindowsではELF実行可能ファイルを実行できますか? WindowsとUNIXのどちらのファイルタイプでも実行できる手順は何でしょうか。私はちょうど興味がある。Linuxの場合はCOFF、Windowsの場合はELF

+0

[UNIXベースアプリケーションのサブシステムの概要](http://technet.microsoft.com/en-us/library/cc771672.aspx#BKMK_PortAppsSUA)[http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX] (http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX) – abmv

+0

SFA/SUAは、NT向けにコンパイルされたPE実行ファイルのみを実行します。 – ephemient

答えて

7

実際に実行可能ファイルを実行して有用なものを作成するには、実行可能ファイル形式だけでなくAPIについても心配する必要があります。 WINEがインストールされたLinuxマシンでは、コマンドラインからWindowsの.EXEファイルを実行することができ、Windowsの場合と同じことを実行します。

CYGWINをWindowsマシンにインストールしてから、CYGWINコンパイラを使用してアプリケーションをソースから再構築すると、Windows上で実行される実行可能ファイルが生成され、同じことが実行されますLinuxの実行ファイルはLinux上で動作します。多くの標準的なLinuxツールは、X-WindowsやGIMPなどのCYGWINリポジトリに移植されています。

+0

私が別の答えでコメントしたように、http://sf.net/projects/line/はWindows上で修正されていないLinuxバイナリを実行してWINEの逆であるようにしようとしました。このプロジェクトは何年も前から放棄されましたが、概念が可能であることは間違いありません。私が正しくリコールすれば、いくつかの静的にリンクされたコンソールプログラムを実行することができ、IPCが動作していました。 – ephemient

1

COFFはもともとUNIX(System Vまたはその周辺)によって導入されていたので、ある種のUNIXはおそらくまだCOFF形式をサポートしています。それはLinuxによって少なくともしばらくは非難されており、おそらく他のほとんどのUnixもサポートを非難または完全に落としました。

Windows ELFサポートはもう少しですiffy - ほとんど確かにそこには深いトリッキーなことはありません。ここで何をしようとしているのかを具体的に説明する必要があります。

+1

http://sf.net/projects/line/は、Windows上でELF実行可能ファイルを読み込むことができました。これは動機付けされた人にとっては良い出発点になるかもしれません。 – ephemient

3

http://lbw.sourceforge.net/は、行よりも優れています。 同じことをするための別のプロジェクトは低かったが、それはあまり効果がなかった。

EDIT:http://atratus.org/はInterix/SFUを持つ必要はなく、同じように見えます。

2

質問に正しく答えるには、ELF、COFF、およびPEの内容を確認することが重要です。これらのバイナリ形式は、本質的に単なるコンテナであり、ファイルに含まれる未処理のCPU命令をどのように実行するかについてオペレーティングシステムに指示を与えます。それらは、MKV、WMV、OGGなどのオーディオ/ビデオコンテナに非常に似ています。実行可能形式のサポートは、オペレーティングシステムにあるかどうかです。 Microsoft Windowsは、最近までCOFFやELFのサポートを一貫して提供していません。 Windows 10では、MicrosoftはWindowsカーネルのUserMode-Linux互換システムルーチンを組み込むことにより、ELFの間接的なサポートを提供しています。 UserMode Linuxカーネルは、Windowsカーネルの上で実行され、ELFバイナリ形式をMS Windowsとは独立して実行しているかのように実行します。

Linux用のLinux(サブカーネル)を使用する代わりに、大部分のLinux APIを完全に互換性のある形式で書き換えることができます。その選択肢は、APIです。 "A"はApplicationを表し、 "I"はInterfaceを表しますが、インターフェースとしてのAPIは主に実行可能なルーチンと環境の仮定のセットです。ファイルシステムと最も基本的なシステムルーチンへのアクセスはWindowsカーネルによって提供され、それ以外のものはUserMode Linuxカーネルで提供されます。これにより、WindowsはELF形式の実行可能ファイルを実行できるだけでなく、既にLinux API上で実行されている最も一般的なELF実行可能ファイルを実行することができます。

LinuxのPE(ほとんどのMicrosoft Windows実行可能ファイル)を実行している質問の反対側の部分も可能です。 MSIL(仮想マシンアプリケーション)とWin32(通常のCPUアプリケーション)を実行できるランタイムラッピングライブラリは2つあります。 Linuxカーネルは特定のバイト形式を認識できるように拡張可能であるため、適切なラッパープログラムを実行するため、カーネルはPEと実行可能なコンテナ形式をサポートします。したがって、Linuxはモノラルランタイム(.NET/C#アプリケーション)またはWINEランタイム(Win32 C/C++)のいずれかでPEプログラムを実行できます。

UserMode-Linux環境をインストールするには、Microsoft's Development Networkの指示に従います。要約すると:

  1. 開発者モードを有効にする:設定|アップデート&セキュリティ|開発者向け| 「Windowsの機能のオンまたはオフ」ダウン
  2. スクロールして、「Linux用のWindowsサブシステム(ベータ版)」機能
  3. 大丈夫ヒットし、再起動(必要性をご確認くださいオープン、スタートメニューから、開発者モード]ラジオボタン
  4. をチェックステップ1
  5. PowerShell /コマンドプロンプトを開き、 "Bash"を実行し、簡単な指示に従ってCanonicalのライセンスを受け取り、Ubuntuイメージのダウンロードを開始します。
  6. ダウンロードが完了したら、スタートメニューから「WindowsでUbuntuでBashを起動する」

この方法はWindows 10でのみ機能し、テキストモードのコンソールと、vcXsrvのようなXorgのWin32ポート(グラフィカルなもの)に限ります。 CygwinまたはMSYS2システムはELFバイナリを実行することはできませんが、通常はLinuxシステム上のELFバイナリと同じアプリケーションを移植して実行することができます。

+0

私は質問の残りの半分に答えていたはずです。 LinuxでPE(Windows実行可能ファイル)を実行するには、さまざまな手段があります。Linuxカーネルは特定のバイト形式を認識できるように拡張可能で、適切なラッパープログラムを実行するためです。したがって、Linuxはモノラルランタイム(.NET/C#アプリケーション)またはWINEランタイム(Win32 C/C++)のいずれかでPEプログラムを実行できます。 –

関連する問題