このうちのいくつかを達成するための(比較的)単純な方法があり、これは「位置独立コード」と呼ばれています。これについては、コンパイラのドキュメントを参照してください。
つまり、いくつかのソースをバイナリにコンパイルすることができます。このバイナリは、アドレス空間のどこに配置しても実行されます。あなたがファイルにこのようなx86バイナリコードを持っていて、mmap()(またはそれに相当するもの)をLinuxとWindowsの両方から呼び出すことができます。
制限事項は当然のことですが、バイナリコードでは両方のプラットフォームで同じ呼び出し規約を使用するように制限する必要があります。両方のプラットフォームで表現できます(32ビットx86ではargsを渡します)。 EAXのスタックと戻り値)、もちろんコードは完全に自己完結型でなければなりません。DLL関数呼び出しはシステム依存であり、システムコールでもありません。
すなわち:
- あなたはあなたがオブジェクトファイルからマシンコードを抽出する必要があります任意の外部依存関係
- せずに自己完結型のコードを作成する必要があります位置独立コード
- を必要としています。
mmap()がファイルを作成し、関数ポインタを初期化し、(* myblob)(someArgs)が行う可能性があります。
gccを使用している場合、 "-ffreestanding -nostdinc -fPIC"オプションを使用すると、最初の2つのオプションについてほとんどのものが得られます。その後、objdumpを使用してELFオブジェクトファイルからバイナリBLOBを抽出します。
が発生するつもりはない(ELFなどに実行可能なPEを変換し、分解)
はまたAgnerのobjconvを見て(Monoランタイムが必要です)全く異なるオブジェクトファイル形式 – KevinDTimm
私は答える資格はありませんが、確かにこのようなことが可能であるはずです。おそらく、組み込みシステムのように、標準ライブラリに依存しないコードを書くことができれば、x86チップ上で実行できるはずです。 – sdg
この質問を見るhttp://superuser.com/questions/209703/why-wont-windows-exes-work-on-linux - 短い答えELF(linux)対PE(windows) – KevinDTimm