対象範囲
動的プロキシは、直接の call、callvirt、newobj 命令を置き換えます。対象となるのは、静的呼び出し、インスタンス呼び出し、仮想呼び出し、インターフェイス呼び出し、プロパティとイベントのアクセサー、オブジェクトの構築、ジェネリック型に対する呼び出し(たとえば List<int>.Add)、およびジェネリックメソッドの呼び出しで、Where、Select、OrderBy などの LINQ 演算子も含まれます。
難読化されたプログラムが元のプログラムとまったく同じように動作するように、いくつかの呼び出しは意図的にプロキシ化されず、直接呼び出しのまま残されます。
- 呼び出し元に依存するメソッド:結果が呼び出し元のメソッドまたはアセンブリによって変わるメソッドで、
Assembly.GetExecutingAssembly、Assembly.GetCallingAssembly、MethodBase.GetCurrentMethodが該当します。これらをプロキシ経由にすると、観察される呼び出し元が変わり、誤った結果が返されます。 - 参照戻り値(
ref):デリゲートは参照戻り値を返すことができません。 - 値型のコンストラクターとデリゲートのコンストラクター。
- ジェネリック型のジェネリックメソッド、および型引数がオープン型、参照渡しの型、ポインター型であるジェネリック呼び出し。
これらの呼び出しは変更されずに実行され、それ以外の対象となる呼び出しはすべてプロキシ化されます。
Last updated on