Couverture
Le proxy dynamique remplace les instructions directes call, callvirt et newobj. Il couvre les appels statiques, d’instance, virtuels et d’interface, les accesseurs de propriétés et d’événements, la construction d’objets, les appels sur des types génériques (par exemple List<int>.Add) et les appels de méthodes génériques, y compris les opérateurs LINQ tels que Where, Select et OrderBy.
Pour que le programme obfusqué se comporte exactement comme l’original, quelques appels ne passent délibérément pas par un proxy et restent des appels directs :
- Les méthodes sensibles à l’appelant, dont le résultat dépend de la méthode ou de l’assembly appelant :
Assembly.GetExecutingAssembly,Assembly.GetCallingAssemblyetMethodBase.GetCurrentMethod. Les faire passer par un proxy modifierait l’appelant observé et renverrait un résultat erroné. - Les retours par référence (
ref), qu’un délégué ne peut pas renvoyer. - Les constructeurs de types valeur et les constructeurs de délégués.
- Les méthodes génériques de types génériques, et les appels génériques dont les arguments de type sont des types ouverts, des types par référence ou des types pointeur.
Ces appels s’exécutent sans modification ; tous les autres appels éligibles passent par un proxy.
Last updated on