.NET: ambiente di esecuzione Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: [email protected] Italian blog: http://blogs.devleap.com/marco.blog www.devleap.it Chi siamo • www.DevLeap.it • Un gruppo di 5 persone con tanta voglia di • • • • • Studiare a fondo le tecnologie Capire il “behind the scenes” Implementare soluzioni reali Confrontarsi con le problematiche reali Sperimentare nuove idee • Facciamo Corsi, Conferenze, Training • Scriviamo libri • http://www.devleap.it/fullcontact www.devleap.it Chi siete ? • • • • • • Chi conosce Java? Chi conosce Visual Basic? Chi conosce C++? Chi conosce COM? Chi conosce C#? Chi conosce VB.NET? www.devleap.it Agenda • Ambiente di esecuzione • Codice IL e codice nativo • MSIL • JIT • NGEN • • • • Ruolo dei metadati Verifica (PEVERIFY) Runtime host Decompilazione www.devleap.it Cosa è .NET • È un ambiente di esecuzione (runtime environment) • Semplifica lo sviluppo e il deployment • Aumenta l’affidabilità del codice • È completamente indipendente da COM • È fortemente integrato con COM • Unifica il modello di programmazione www.devleap.it Ambiente di esecuzione • Concetti chiave: • • • • MSIL: Microsoft Intermediate Language CLR: Common Language Runtime CTS: Common Type System CLS: Common Language Specification www.devleap.it Codice interpretato Sorgenti Interprete www.devleap.it Output Codice nativo Sorgenti Compilatore Codice nativo (.EXE) www.devleap.it Output Codice MSIL Sorgenti Compilatore .NET Codice MSIL (Assembly) .EXE/.DLL Compilatore JIT Codice nativo www.devleap.it Output Codice MSIL Sorgenti Compilatore .NET Codice MSIL (Assembly) .EXE/.DLL Codice + metadati Compilatore JIT Codice nativo www.devleap.it Output Codice MSIL Sorgenti Compilatore JIT Ambiente di Compilatore esecuzione .NET .NET Runtime Codice nativo www.devleap.it Codice MSIL (Assembly) .EXE/.DLL Output Motori JIT • Inizialmente previsti 4 motori: Motore Descrizione Dove si trova Attuale implementazione JIT OptiJit Codice più ottimizzato Non implementato FastJit Esecuzione JIT più veloce .NET Compact Framework Native (Pre-Jit) Compilazione preventiva, assembly compilato salvato in GAC NGEN.EXE www.devleap.it Uso di NGEN • Va bene su librerie di base che non hanno forti dipendenze da altri assembly • Codice nativo valido solo per la macchina su cui si compila con NGEN • Non si può ridistribuire su altri PC • Minori ottimizzazioni • In certi casi compila comunque con JIT • Modificata versione di un componente globale da cui dipende • Non riesegue NGEN in automatico www.devleap.it Metadati • • • • • Concetto chiave in .NET Informazioni sui tipi di un assembly Generati automaticamente dai compilatori Estendibili da terze parti Formato binario rappresentabile con XML: • XML Schema (XSD) • Serializzazione e deserializzazione oggetti a runtime in XML • Convertibile da/a COM type library www.devleap.it Metadati • Descrizione di tipi e assembly • Simile a COM Type Library • Simile a RTTI C++ Serialization Codice sorgente (es. SOAP) Altri Compilatori Type Browser Reflection Designers Compilatore Debugger Metadati Profiler (+ codice) Schema Generator Proxy Generator Codifica XML (SDL) www.devleap.it Metadati • Descrizione di un assembly • • • • Identità: nome, versione, cultura [, pubblic key] Tipi esportati Assembly da cui dipende Permessi necessari per l’esecuzione • Descrizione dei tipi • Nome, visibilità, classe base, interfacce implementate • Attributi custom • Definiti dall’utente • Definiti dal compilatore • Definiti dal Framework www.devleap.it Tool che usano i metadati • Compilatori • Compilazione condizionale • Ambienti RAD • Informazioni sulle proprietà dei componenti • Categoria • Descrizione • Editor personalizzati di tipi di proprietà • Analisi dei tipi • Intellisense • ILDASM www.devleap.it Compilatori e metadati • Import dei tipi di dati cross-language • Emettono i metadati insieme al codice • Descrivono i tipi definiti e usati • Registrano gli assembly esterni referenziati • Registrano informazioni di versione • Possono interpretare attributi custom • • • • Obsolete CLS Compliance (conformità CLS) Compilazione condizionale (es. debug) Attributi specifici del linguaggio www.devleap.it Type safety • Isolamento della memoria • Consente l’esecuzione sicura di più applicazioni nello stesso processo • Type safety (sicurezza dei tipi) • Assicura isolamento della memoria • Assicura operazioni corrette rispetto al sistema di sicurezza • Non è richiesta dal Runtime • Verification • Assicura type safety www.devleap.it Type safety • Si eliminano: • Cast non sicuri • Variabili non inizializzate • Indici di array fuori limite (out-of-bounds) • PEVERIFY.EXE • Tool linea di comando per verificare requisiti di type safety di un assembly www.devleap.it Runtime Host • Esecuzione di un’applicazione .NET MYCOMCLASS.DLL Managed World KERNEL.DLL MYNETCLASS.DLL MSCOREE.DLL Marshaling MSCORLIB.DLL Processo Win32 (app.exe) www.devleap.it Runtime Host • MSCOREE.DLL • “Ultima” DLL COM rimasta... • _CorDllMain: Entry-point del loader per caricare ed eseguire il codice IL • MSCORLIB.DLL • Implementa CTS (Common Type System) • Contiene BCL (Base Class Library) • Non si vede con DEPENDS.EXE, usare ADEPENDS.EXE • Diversi tipi processi host • Shell exe, ASP.NET, Internet Explorer, Servizi NT www.devleap.it Modello di esecuzione Assembly Execution Support Code Managers Security System Class Loader IL to native code compiler Managed Native Code CPU www.devleap.it Primo riferimento al tipo Prima chiamata al metodo Decompilazione • Grazie al codice IL e ai metadati è più facile fare reverse engineering • Non è evitabile in senso assoluto • Si può rendere più ostico il compito di ricostruire il codice originale (o qualcosa che ci assomigli) • Tecniche disponibili: • Obfuscation • Compilazione in codice nativo www.devleap.it Tool di decompilazione • ILDASM • Si ottiene il sorgente IL che può essere modificato e ricompilato • Anakrino www.anakrino.org • Il primo decompilatore che ricostruisce codice C# da qualsiasi linguaggio • Reflector www.aisto.com/roeder/dotnet • Decompilatore che supporta decompilazione in C#, VB.NET e Delphi (da qualsiasi linguaggio originale) • Salamander www.remotesoft.com/salamander • Meno diffuso, è un prodotto commerciale: www.devleap.it Tool di obfuscation • Demeanor www.wiseowl.com/products/DemeanorEnterprise.aspx • Dotfuscator preemptive.com/products/dotfuscator/index.html • eXtensible C# www.resolvecorp.com • Spices.NET www.9rays.net/cgi-bin/components.cgi?act=1&cid=86 • LSW-IL Obfuscator www.lesser-software.com/ilobf.htm • Salamander www.remotesoft.com/salamander/obfuscator.html • XenoCode www.xenocode.com www.devleap.it Tool per avere eseguibili unmanaged • Creano un eseguibile unmanaged che scompatta l’assembly in memoria e lo esegue • I metadati non sono visibili direttamente • Prodotti disponibili: • Deploy .NET www.junglecreatures.com/jungle/index.jsp • Thinstall http://thinstall.com/dotnet www.devleap.it Tool per creare codice nativo • Conversione del codice IL in codice nativo, lasciando un formato di eseguibile managed (con metadati, eventualmente offuscati) • Risultato analogo ad eseguibile prodotto in Managed C++ con #pragma unmanaged • Massima compatibilità con altri assembly • Problemi di portabilità su diversi processori • Minori ottimizzazioni del JIT • Solo un prodotto: • Salamander .NET Protector www.remotesoft.com/salamander/protector.html www.devleap.it Considerazioni finali • Un mondo nuovo per sviluppare • Framework di classi già molto esteso • Ma soprattutto coerente! • Quasi tutto completamente estendibile • Alta integrabilità con il codice esistente • Ottima piattaforma per sviluppare componenti COM • A prima vista è tutto semplice, ma è bene sapere cosa c’è dietro (tanto!!) www.devleap.it Altre Informazioni • Dove posso ottenere maggiori informazioni • • • • www.devleap.it www.microsoft.com/msdn/italy msdn.microsoft.com www.gotdotnet.com • Developer resources • Microsoft Visual Studio.NET • Microsoft .NET Framework SDK • Microsoft Developer Network www.devleap.it Introduction to .NET I vostri feedback sono importanti • Scriveteci Grazie della partecipazione – A presto – [email protected] www.devleap.it