2009-04-24 10 views
3

このように狂っている、私は知っている。CLRホストを実行中のプロセスに注入することは可能ですか?

.NET経由で拡張したい実行可能ファイル(アクセス権のないソースコード)があります。これはネイティブの実行可能ファイルなので、これを行うにはCLRホストを注入する必要があります。私の基本的なアイデアは、.NET言語(例えばC#)を介してスクリプトのような機能を提供し、スクリプトが操作するターゲット実行可能ファイルにフックを提供することです。

これを達成するために、DLL注入、ランタイムASM注入など、さまざまな手法を使用する必要があることは知っていますが、私が知りたいことは次のとおりです。これまでどおり誰かにこのようなことをさせてもらえましたか?

+0

私は決してこれをやったことはありませんが、あなたは正しい道にいると思います。 CLRホスティングAPIを使用するDLLを注入して物事を稼働させます。あなたのネイティブDLLは、必要な場所にすべてのフックを挿入する必要がありますが、実際の作業のためにホストされたCLRライブラリを呼び出すことはできません。 –

答えて

2

ネイティブ実行可能ファイルがCOMオブジェクトを使用できる場合は、COM相互運用機能を使用してこれを行うことができます。 .NETアセンブリをinteropに登録すると、ネイティブ実行可能ファイルで.NETクラスを「通常の」COMオブジェクトと同じように使用できます。最初のものが作成されると、ネイティブプロセス内でCLRがスピンアップします。同様にネイティブの実行可能ファイルからCOMオブジェクトを公開することができれば、相互運用アセンブリを作成する場合(またはIDispatchのみを使用する場合はタイプライブラリを使用しなくても).NETコードからCOMオブジェクトを使用できます。

基本は簡単ですが、表面を傷つけるだけです。このような深刻なプロジェクトでは、深刻な参照が必要です。 Adam Nathanの.NET and COM, The Complete Interoperability Guideを強くお勧めします。それはあまり知られていない大きな本です。また、.NETとCOMのクラスを設計してきれいに相互運用するための素晴らしい情報がたくさんあります。また、CLRをネイティブアプリ内で直接ホストする方法についても説明していますが、そのオプションはソースコードにアクセスできないと実用的でない場合があります。私は間違いなくCOMの相互運用経路から始め、あなたが他のオプションを持っていなければネイティブにCLRをホストするだけです。

+0

ありがとう - 残念ながら、私が念頭に置いている実行可能ファイルはCOM対応ではありません。 = \まだ私はあなたが提供した参考資料を調べます - ありがとうございました。 =) –

1

実際には、オートメーションフレームワークでは非常に似通っています。 CodePlexのEasyHookプロジェクトをご覧ください。そのプロセス間の通信のためのIPCコミュニケータが組み込まれています。それは足の仕事のビットが必要でしたが、あなたが探しているものを正確に行う必要があります。

関連する問題