La
La
plataforma
plataforma
.NET
.NET
La máquina virtual
La máquina virtual
de .NET
de .NET
CLR, CLI y Rotor
CLR, CLI y Rotor
Juan Manuel Cueva Lovelle
Juan Manuel Cueva Lovelle
cueva
cueva
@
@
lsi
lsi
.
.
uniovi
uniovi
.
.
es
es
www.
CLR
CLR
Operating System
Operating System
Common Language Runtime
Common Language Runtime
Base Class Library
Base Class Library
ADO.NET and XML
ADO.NET and XML
ASP.NET
ASP.NET
Web Forms Web Services
Web Forms Web Services
Mobile Internet Toolkit
Mobile Internet Toolkit
Windows
Windows
Forms
Forms
Common Language Specification
Common Language Specification
VB
VB
C++
C++
C#
C#
JScript
JScript
J#
J#
Hola.exe
Hola.cs
Compilador C#
PE Header
Metadata
IL Binary
Table of Contents
assembly, classes, methods,
fields, properties, events,
attributes, marshallers,
references, etc
Method Bodies
ILDASM
ILDASM
Hola
Hola
.exe
.exe
Compilando
El
Manifesto:
Manifesto:
descripción
descripción
del assembly
del assembly
Nombre
Nombre
,
,
versión
versión
,
,
cultura
cultura
Propiedades
Propiedades
de
de
Securidad
Securidad
:
:
Permisos
Permisos
Clave
Clave
pública
pública
(Public Key)
(Public Key)
Dependencias
Dependencias
de
de
otros
otros
assemblies
assemblies
Lista
Lista
de
de
clases
clases
en el assembly
en el assembly
Para
Para
cada
cada
clase
clase
:
:
Las interfaces
Las interfaces
que implementa
que implementa
Lista
Lista
de methods, fields, properties, events
de methods, fields, properties, events
Signaturas
Signaturas
(
(
argumentos
argumentos
y
y
tipo
tipo
de
de
resultado
resultado
) de
) de
cada
cada
miembro
miembro
Atributos personalizados
Atributos personalizados
(Custom attributes )
(Custom attributes )
¿
El lenguaje intermedio IL
El lenguaje intermedio IL
Trabaja sobre una máquina abstracta de
Trabaja sobre una máquina abstracta de
pila
pila
Sus operaciones fundamentales son Load y
Sus operaciones fundamentales son Load y
Store
Store
Es un ensamblador totalmente orientado a
Es un ensamblador totalmente orientado a
objetos
objetos
Se especifica el código de todos los
Se especifica el código de todos los
PEVerify
PEVerify
DEPLOYMENT
DEPLOYMENT
GAC,
GAC,
app. directory
app. directory
public static void Main(String[]public static void Main(String[] public static void Main(String[] public static void Main(String[] argsargsargsargs )))) { String
{ String { String
{ String usrusr; usrusr; ; ; FileStreamFileStreamFileStreamFileStream f; f; StreamWriterf; f; StreamWriterStreamWriter w;StreamWriterw;w;w; try { try { try { try { usr usr usr
usr =Environment.=Environment.=Environment.=Environment.GetEnvironmentVariableGetEnvironmentVariableGetEnvironmentVariableGetEnvironmentVariable("USERNAME");("USERNAME");("USERNAME");("USERNAME"); f=new
f=new f=new
f=new FileStreamFileStreamFileStreamFileStream(“C:(“C:(“C:(“C:\\\\\\\\test.txt",test.txt",test.txt",test.txt",FileModeFileModeFileModeFileMode.Create);.Create);.Create);.Create); w=new
w=new w=new w=new StreamWriterStreamWriterStreamWriterStreamWriter(f);(f);(f);(f); w. w. w. w.WriteLineWriteLineWriteLine((((usrWriteLineusrusrusr);););); w.Close(); w.Close(); w.Close(); w.Close(); } catch (Exception e){ } catch (Exception e){ } catch (Exception e){ } catch (Exception e){
Console. Console. Console.
Console.WriteLineWriteLineWriteLineWriteLine("Exception:"+e.("Exception:"+e.("Exception:"+e.("Exception:"+e.ToStringToStringToStringToString());());());()); }}}}
}}}}
Compiler
Compiler
DEVELOPMENT
DEVELOPMENT
public static void Main(String[] public static void Main(String[] public static void Main(String[] public static void Main(String[] argsargsargs ))))args { String
{ String { String
{ String usrusrusr; usr; ; ; FileStreamFileStreamFileStreamFileStream f; f; StreamWriterf; f; StreamWriterStreamWriterStreamWriter w;w;w;w; try { try { try { try { usr usr usr
usr =Environment.=Environment.=Environment.=Environment.GetEnvironmentVariableGetEnvironmentVariableGetEnvironmentVariableGetEnvironmentVariable("USERNAME");("USERNAME");("USERNAME");("USERNAME"); f=new
f=new f=new
f=new FileStreamFileStreamFileStreamFileStream(“C:(“C:(“C:(“C:\\\\\\\\test.txt",test.txt",test.txt",test.txt",FileModeFileModeFileModeFileMode.Create);.Create);.Create);.Create); w=new
w=new w=new w=new StreamWriterStreamWriterStreamWriterStreamWriter(f);(f);(f);(f); w. w. w. w.WriteLineWriteLineWriteLineWriteLine((((usrusrusr);usr););); w.Close(); w.Close(); w.Close(); w.Close(); } catch (Exception e){ } catch (Exception e){ } catch (Exception e){ } catch (Exception e){
Console. Console. Console.
Console.WriteLineWriteLineWriteLine("Exception:"+e.WriteLine("Exception:"+e.("Exception:"+e.("Exception:"+e.ToStringToStringToString());ToString());());()); }}}}
}}}}
Source code
Source code
Assembly
Assembly
PE header + MSIL +
PE header + MSIL +
Metadata + EH Table
Metadata + EH Table
EXECUTION
EXECUTION
Assembly info
Assembly info
Module
Module
+ Class list
+ Class list
Policy
Policy
Manager
Manager
Host
Host
Policy
<?xml version="1.0" encoding="utf-8" ?> <configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissio ns and forms the root of the code group tree."><IMembershipCondition clas s="AllMembershipCondition" version="1"/> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust"