2010-11-22 5 views
3

もちろん、ほとんどの常識では、「作者が意図しなかった方法でプログラムの動作に影響を与える方法」(wiki)です。.netのコードインジェクションは何ですか(プログラミングスキルとして)?

また、テクニックを使用しているリフレクションとタイプビルダもすべて「コードインジェクション」で名前を付けることができますが、誰もこれを実行しません。

「コードインジェクション」は「ランタイム」に関するものだと思っていました。興味深いデータを得るために別のプロセスでスレッドを開始するような、Reflexilがこれを理解する方法を驚かせました。編集したアセンブリを保存し、古いアセンブリを新しい "(私が何かが恋しい10%)と置き換えます。

だから、私は.NETのどのような技術が「コードインジェクション」という用語で呼ばれているか興味深いですか?

BTW。私は知っておもしろいことです:非常に非常にプライベートな、数回ネストされたシステムクラスの "仮想メソッドテーブル"の "仮想メソッドへのポインタ"を実行時に自分のメソッドへのポインタで置き換えることは可能ですか?私の理解から純粋なコードの注入。

答えて

4

.NETでのコードインジェクションは非常に困難です。ほとんどの場合、コードは最後の瞬間まで存在しないためです。 JITコンパイラによって生成された実行前の1秒間。

実用的なアプローチでは、たとえばAOPで一般的なIL再書き込みが使用されます。これは、プログラムが実行を開始するまでの前に、のオフラインで発生します。これはもはや実際には「注入」ではなく、ディスク上のプログラムを物理的に変更します。

インラインILリライティング手法があり、管理されていないプロファイラインターフェイスが使用されます。かなり実用的ではない、アプローチを文書化する雑誌の記事はavailable hereです。それはかなり日付がつきました。それ以来、プロファイラAPIはかなり変更されています。これを使用するツールについて聞いたことはありません。

+0

スーパーアンサー。どうもありがとうございました。 –

1

アスペクト指向プログラミング(AOP)は、コードインジェクションを使用してメソッド呼び出しを傍受します。

1

「コードインジェクション」が聞こえたら、私は彼らがInversion of Controlについて話していると思う傾向があります。 .Netのこれの良い例は、Ninjectフレームワークです。

関連する問題