Skip to Content
Nouvelle version 12 disponible 🎉

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.GetCallingAssembly et MethodBase.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