.NET: ambiente di esecuzione Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog: http://blogs.devleap.com/marco.blog
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 Output www.devleap.it
Codice nativo Sorgenti Compilatore Codice nativo (.EXE) Output www.devleap.it
Codice MSIL Codice MSIL Compilatore .NET Sorgenti (Assembly) .EXE/.DLL Codice nativo Output Compilatore JIT www.devleap.it
Codice MSIL Codice MSIL Compilatore .NET Sorgenti (Assembly) .EXE/.DLL Codice + metadati Codice nativo Output Compilatore JIT www.devleap.it
Ambiente di esecuzione Codice MSIL Ambiente di esecuzione .NET Runtime Sorgenti Compilatore .NET Codice MSIL (Assembly) .EXE/.DLL Codice nativo Output Compilatore JIT www.devleap.it
Motori JIT Inizialmente previsti 4 motori: Motore Descrizione Dove si trova JIT Attuale implementazione 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++ Reflection Codice sorgente Serialization (es. SOAP) Designers Compilatore Altri Compilatori Debugger Metadati (+ codice) Type Browser Profiler Proxy Generator Schema Generator Codifica XML (SDL) www.devleap.it
Metadati Descrizione di un assembly Descrizione dei tipi 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 Type safety (sicurezza dei tipi) 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: PEVERIFY.EXE 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 MSCOREE.DLL Processo Win32 (app.exe) MSCOREE.DLL MYCOMCLASS.DLL Managed World KERNEL.DLL MYNETCLASS.DLL Marshaling MSCORLIB.DLL www.devleap.it
Runtime Host MSCOREE.DLL MSCORLIB.DLL Diversi tipi processi host “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
IL to native code compiler Modello di esecuzione Assembly Class Loader Primo riferimento al tipo IL to native code compiler Execution Support Managed Native Code Prima chiamata al metodo Code Managers Security System CPU www.devleap.it
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 info@DevLeap.it www.devleap.it