2010-12-01 26 views
1

純粋なWin32 APIでVisual C++プログラムを作成しています。私の理解によれば、x86とx64アーキテクチャ用に実行可能ファイルを個別にコンパイルして生成する必要があります。x86とx64の実行可能ファイルを1つの実行可能ファイル(Sysinternalsツールなど)で結合する

どのようにそれらを1つの実行可能ファイルに結合し、実行時にx64を出力するのですか?私はSysinternalsツールが同じことをしているのを見てきましたが、プログラム的にどのように行われているのかわかりません。

x86にリソースとしてx64バージョンを含めてからファイルシステムに書き込んで、 CreateProcessを実行する必要がありますか?

任意のポインタ?

+0

一般に、x86アプリケーションはx64上で正常に動作します。しかし、sysinternalsツールはドライバを使用します。ドライバは適切なカーネルアーキテクチャのために構築する必要があります – Bahbar

+0

しかし、質問は残っています。内部で実行ファイルを実行する方法は異なります。 –

+1

個人的には、私はsysinternalsツールがこれを行う方法が嫌いです。彼らは、実行するたびに不必要にファイルを作成したり削除したりしています。タスクマネージャのエントリ数が2倍になってしまいます(1つのexeが別のバイナリを削除するのを待っています)。私はその点を見ない。マシンに適切なファイルをインストールするインストーラを作成するのは難しくありません。インストーラのないツールでは、両方のexeファイルをzip形式で実行して適切なファイルを実行させることも難しくありません(または、間違ったもの)。 –

答えて

3

はい、オペレーティングシステム固有のドライバをリソースとして埋め込みます。ここではそのHandle.exeユーティリティを開くには、ファイル+開く] +ファイルを使用した後のVisual Studioからのスクリーンショットです:彼らが何であるか

alt text

正確にわからないが、彼らは、Windows 9xでは、32ビットをカバーするように、それは確かに見て、 64ビット。次に、リソースAPI関数(FindResource、SizeofResource、LockResource)とWriteFile()を書き込み可能なディレクトリのファイルに使用します。次に、CreateServiceとStartServiceでドライバをロードします。

メインプログラムはx86なので、どのバージョンのWindowsでも動作します。実行時にバイナリを生成することは、btwを行うには非常に顧客フレンドリーではありません。通常、どこから来たのかを知ることが大好きです。

関連する問題