Domanda

I nomi di classe, metodo e variabili vengono inclusi in MSIL dopo aver compilato un progetto di app di Windows in un EXE?

  • Per offuscamento - meno nomi, più difficile da decodificare.
  • E per rendimento - nomi più brevi, accesso più veloce.

ad esempio Quindi, se i metodi SONO chiamati tramite nome:

  • Mantieni i nomi brevi , migliori prestazioni per la ricerca con nome.
  • Mantieni i nomi criptici , più difficili da decompilare.
È stato utile?

Soluzione

Sì, sono nell'IL - accendi Reflector e tu " li vedrò. Se non finissero nell'IL, non potresti costruire contro di loro come librerie. (E sì, puoi fare riferimento ai file .exe come se fossero librerie di classi.)

Tuttavia, tutto ciò è stato risolto una volta in JIT.

Mantieni i nomi leggibili in modo da poter conservare il codice in futuro. È improbabile che il problema delle prestazioni faccia qualsiasi differenza misurabile e se vuoi offuscare il tuo codice, non farlo a livello di codice sorgente (dove sei il uno per leggere il codice) - fallo con un offuscatore appositamente costruito.

EDIT: per quanto riguarda ciò che è incluso - perché non lanciare Reflector o ildasm e scoprirlo? Dalla memoria, perdi i nomi delle variabili locali (che si trovano nel file pdb se lo costruisci) ma questo è tutto. I nomi dei metodi privati ??e i nomi delle variabili private sono ancora lì.

Altri suggerimenti

Sì, lo fanno. Non penso che ci sarà un notevole miglioramento delle prestazioni usando nomi più brevi. Non è possibile che il guadagno superi la perdita di leggibilità.

Le variabili locali non sono incluse in MSIL. Campi, metodi, classi ecc. Le variabili sono basate sull'indice.

I nomi dei membri vengono inclusi nell'IL se sono privati ??o pubblici. In effetti viene incluso anche tutto il codice e, se si utilizza Reflector, è possibile leggere praticamente tutto il codice sorgente dell'applicazione. Ciò che rimane è il debug dell'app e penso che potrebbero esserci degli strumenti per farlo.

Devi ASSOLUTAMENTE (e non posso sottolinearlo di più) offuscare il tuo codice se stai realizzando pacchetti di applicazioni che hanno un numero di clienti e concorrenza. Fortunatamente ci sono un certo numero di offuscatori disponibili.

Questa è una grande lamentela che ho con .Net. Dal momento che la SM sta facendo un duro lavoro su questo, perché non sviluppare (o acquisire) un offuscatore professionale e renderlo parte di VS. Dotfuscator non lo taglia, non la versione che hanno per la community.

  
      
  • Mantieni i nomi brevi, meglio   prestazioni per la ricerca dei nomi.
  •   

Come potrebbe fare la differenza? Non sono sicuro di come gli identificatori vengano cercati dalla VM, ma sono abbastanza sicuro che non stia eseguendo una ricerca comparativa di stringhe diritte. Questo sarebbe il modo peggiore per farlo.

  
      
  • Mantieni i nomi criptici, più difficili da decompilare.
  •   

Ad essere sincero, non credo che l'offuscamento del codice sia di grande aiuto. Gli sviluppatori più competenti là fuori hanno già sviluppato un "sesto senso" per capire rapidamente le cose anche se identificatori come i nomi dei metodi sono totalmente inutili poiché molto spesso il codice sorgente che devono mantenere o migliorare ha già questi problemi (sto parlando di nomi di metodi come " DoAllStuff () ").

Comunque, la sicurezza attraverso l'oscurità di solito è una cattiva idea .

Se sei preoccupato per l'offuscamento controlla .NET Reactor. Ho testato 8 diversi offuscatori e Reactor non era solo il più economico commerciale, era il secondo migliore del gruppo (il migliore era il più costoso, Dotfuscator Gold).

[EDIT]

In realtà ora che ci penso, se tutto ciò che ti interessa è offuscare i nomi dei metodi, quello che viene fornito con VS.NET, Dotfuscator Community Edition, dovrebbe funzionare bene.

Penso che vengano aggiunti, ma la lunghezza del nome non influirà su nulla, a causa del modo in cui vengono cercati i nomi delle funzioni. Per quanto riguarda l'offuscamento, penso che ci siano strumenti (Dotfuscator o qualcosa del genere) che sostanzialmente fanno esattamente quello che stai dicendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top