.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
Scarica

.NET: ambiente di esecuzione