310 likes | 431 Views
.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”
E N D
.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 Codicenativo(.EXE) Output www.devleap.it
Codice MSIL Sorgenti Compilatore.NET CodiceMSIL (Assembly) .EXE/.DLL Codicenativo Output Compilatore JIT www.devleap.it
Codice MSIL Sorgenti Compilatore.NET CodiceMSIL (Assembly) .EXE/.DLL Codice + metadati Codicenativo Output Compilatore JIT www.devleap.it
Codice MSIL Ambiente di esecuzione .NET Runtime Sorgenti Compilatore.NET CodiceMSIL (Assembly) .EXE/.DLL Codicenativo Output Compilatore JIT www.devleap.it
Motori JIT • Inizialmente previsti 4 motori: 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 Codicesorgente Serialization (es. SOAP) Designers Compilatore AltriCompilatori Debugger Metadati (+ codice) Type Browser Profiler Proxy Generator Schema 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 rispettoal 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 Processo Win32 (app.exe) MSCOREE.DLL MYCOMCLASS.DLL Managed World KERNEL.DLL MYNETCLASS.DLL Marshaling MSCORLIB.DLL 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 ClassLoader Primo riferimento al tipo IL to nativecode compiler ExecutionSupport ManagedNativeCode Prima chiamataal metodo CodeManagers SecuritySystem 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 • Demeanorwww.wiseowl.com/products/DemeanorEnterprise.aspx • Dotfuscator preemptive.com/products/dotfuscator/index.html • eXtensible C# www.resolvecorp.com • Spices.NETwww.9rays.net/cgi-bin/components.cgi?act=1&cid=86 • LSW-IL Obfuscator www.lesser-software.com/ilobf.htm • Salamanderwww.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 .NETwww.junglecreatures.com/jungle/index.jsp • Thinstallhttp://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 Protectorwww.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 persviluppare 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