Copertura
Il proxy dinamico sostituisce le istruzioni dirette call, callvirt e newobj e copre le chiamate statiche, di istanza, virtuali e di interfaccia, i metodi di accesso di proprietà ed eventi, la costruzione di oggetti, le chiamate sui tipi generici (per esempio List<int>.Add) e le chiamate a metodi generici, compresi gli operatori LINQ come Where, Select e OrderBy.
Perché il programma offuscato si comporti esattamente come l’originale, alcune chiamate deliberatamente non passano dal proxy e restano chiamate dirette:
- Metodi sensibili al chiamante, il cui risultato dipende dal metodo o dall’assembly chiamante:
Assembly.GetExecutingAssembly,Assembly.GetCallingAssemblyeMethodBase.GetCurrentMethod. Farli passare da un proxy cambierebbe il chiamante osservato e restituirebbe un risultato errato. - Valori restituiti per riferimento (
ref), che un delegate non può restituire. - Costruttori di tipi valore e costruttori di delegate.
- Metodi generici su tipi generici, e chiamate generiche i cui argomenti di tipo sono tipi aperti, tipi per riferimento o tipi puntatore.
Queste chiamate vengono eseguite senza modifiche; ogni altra chiamata idonea passa dal proxy.
Last updated on