Coverage
Dynamic Proxy replaces direct call, callvirt and newobj instructions, covering static, instance, virtual and interface calls, property and event accessors, object construction, calls on generic types (for example List<int>.Add), and generic method calls — including LINQ operators such as Where, Select and OrderBy.
To keep the obfuscated program behaving exactly like the original, a few calls are deliberately not proxied and are left as direct calls:
- Caller-sensitive methods whose result depends on the calling method or assembly —
Assembly.GetExecutingAssembly,Assembly.GetCallingAssemblyandMethodBase.GetCurrentMethod. Routing these through a proxy would change the observed caller and return a wrong result. - By-reference (
ref) returns, which a delegate cannot return. - Value-type constructors and delegate constructors.
- Generic methods on generic types, and generic calls whose type arguments are open, by-reference or pointer types.
These calls run unchanged; every other eligible call is proxied.
Last updated on