Cobertura
El proxy dinámico sustituye las instrucciones directas call, callvirt y newobj, y cubre las llamadas estáticas, de instancia, virtuales y de interfaz, los métodos de acceso de propiedades y eventos, la construcción de objetos, las llamadas sobre tipos genéricos (por ejemplo List<int>.Add) y las llamadas a métodos genéricos, incluidos los operadores de LINQ como Where, Select y OrderBy.
Para que el programa ofuscado se comporte exactamente igual que el original, unas pocas llamadas no pasan deliberadamente por un proxy y se dejan como llamadas directas:
- Métodos sensibles al llamador, cuyo resultado depende del método o del ensamblado que llama:
Assembly.GetExecutingAssembly,Assembly.GetCallingAssemblyyMethodBase.GetCurrentMethod. Hacerlos pasar por un proxy cambiaría el llamador observado y devolvería un resultado incorrecto. - Valores devueltos por referencia (
ref), que un delegado no puede devolver. - Constructores de tipos de valor y constructores de delegados.
- Métodos genéricos de tipos genéricos, y llamadas genéricas cuyos argumentos de tipo son tipos abiertos, por referencia o de puntero.
Estas llamadas se ejecutan sin cambios; todas las demás llamadas elegibles pasan por un proxy.
Last updated on