Autor
|
Tema: Ensamblador en .NET (Leído 6,584 veces)
|
DragonFire
|
Un ensamblador orientado a objetos =) .assembly HelloWorld { }
.namespace ilamscosa { .class private auto ansi beforefieldinit MainClass { .method public hidebysig static void Main(string[] args) cil managed { .entrypoint .maxstack 1 ldstr "Hola Ensamblador de .NET" call void [mscorlib]System.Console::WriteLine(string) ret } } }
|
|
|
En línea
|
|
|
|
JuanK_Solocodigo
|
Hola mundo. un exe .assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 2:0:0:0 }
.assembly extern System.Windows.Forms { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 2:0:0:0 }
//Mi Ensamblado .assembly HM { .hash algorithm 0x00008004 .ver 1:0:0:0 }
.module HM.exe .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0002 // WINDOWS_CUI .corflags 0x00000001 // ILONLY
.class private auto ansi beforefieldinit HolaMundo extends [mscorlib]System.Object { .method public hidebysig static void Main(string[] Args) cil managed { //Establece que este metoido es el metodo de entrada ppal del //ensamblado .entrypoint // Code size 19 (0x13) .maxstack 8 ldstr \\\"CIL, bacano\\\" call valuetype[System.Windows.Forms] System.Windows.Forms.DialogResult [System.Windows.Forms] System.Windows.Forms.MessageBox::Show(string) pop ret } // end of method HolaMundo::Main
//Contructor por defecto de la clase .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // Code size 7 (0x7) .maxstack 8 ldarg.0 call instance void [mscorlib]System.Object::.ctor() ret } // end of method HolaMundo::.ctor
} // end of class HolaMundo
|
|
« Última modificación: 19 Agosto 2006, 00:37 am por JuanK_solocodigo »
|
En línea
|
|
|
|
JuanK_Solocodigo
|
Ejercicio creando una dll. .assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 2:0:0:0 }
//Referenciar System.Windows.Forms .assembly extern System.Windows.Forms { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 2:0:0:0 }
//Definiendo ensamblado simple de un archivo .assembly CILCars { .hash algorithm 0x00008004 .ver 1:0:0:0 } .module CILCars.dll
//Implementacion .namespace CILCars { .class public auto ansi beforefieldinit CILCar extends [mscorlib]System.Object { //Definicion de campos .field public string petName .field public int32 currSpeed //Constructor sencillo .method public hidebysig specialname rtspecialname instance void .ctor(int32 c, string p)cil managed { .maxstack 8 //Cargar primer argumento al stack ldarg.0// es el objeto this, siempre pasado como oculto de primer parametro //llamar al constructor de la clase padre call instance void[mscorlib]System.Object::.ctor(); //Ahora cargar 1er y 2do argumento al stack ldarg.0//this siempre se pasa como parametro ldarg.1//int32 //almacenar la punta de la pila (int 32) a la variable miembro (field) currSpeed stfld int32 CILCars.CILCar::currSpeed //Asignar ahora la variable petName ldarg.0//this siempre se pasa como parametro ldarg.2//string stfld string CILCars.CILCar::petName ret } } .class public auto ansi beforefieldinit CILCarInfo extends [mscorlib]System.Object { //Definiendo un mestodo estatico .method public hidebysig static void Display(class CILCars.CILCar c) cil managed { .maxstack 8 //definiendo variable local .locals init ([0] string caption) //Cargar el valor de CILCar del auto en el stack ldstr \"{0}\'s speed is: \" //Manda del CILCar al stack (el puntero desde luego) ldarg.0 //Ahora se coloca el valor de CILCar.petName en el stack //y se llama a statis String.Format(string, object) ldfld string CILCars.CILCar::petName call string [mscorlib]System.String::Format(string, object) stloc.0 //Ahora cargo el valor de currSpeed en el stack y obtengo su representacion //alfabetica //Enviar el objecto que accedere al stack (CILCar) ldarg.0 //Enviar la direccion de la variable que necesito ya que //ToString requiere la direccion en la cima del stack ldflda int32 CILCars.CILCar::currSpeed //ahora llamo a ToString call instance string [mscorlib]System.Int32::ToString() //Lo guardo en mi variable local ldloc.0 //Ahora llamo al msgbox par que muestre lo necesario call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string) pop ret } } }
|
|
|
En línea
|
|
|
|
JuanK_Solocodigo
|
Una interfaz en una dll. .assembly extern mscorlib{}
//Mi ensamblado .assembly CILTypes { .ver 1:0:0:0 } .module CILTypes.dll
//Ensamblado de Windows GUI .subsystem 0x0002
.namespace Entrenamiento { .namespace MiNamespace{} }
.namespace MiNamespace { //Definicion de tipos base .class public MiClaseBase{} .class public interface IMiInterface{} //Definicion de tipos heredados | implementados .class public MiClaseDerivada extends MiNamespace.MiClaseBase implements MiNamespace.IMiInterface{} //Definicion de una estructura .class public sealed MiEstructura1 extends [mscorlib]System.ValueType{} .class public value MiEstructura2{} //Definicion de enums .class public sealed MiEnum1 extends [mscorlib]System.Enum{} .class public enum MiEnum2{} }
|
|
« Última modificación: 19 Agosto 2006, 00:47 am por JuanK_solocodigo »
|
En línea
|
|
|
|
JuanK_Solocodigo
|
Una interfaz en una dll. .assembly extern mscorlib{}
//Mi ensamblado .assembly CILTypes { .ver 1:0:0:0 } .module CILTypes.dll
//Ensamblado de Windows GUI .subsystem 0x0002
.namespace Entrenamiento { .namespace MiNamespace{} }
.namespace MiNamespace { //Definicion de tipos base .class public MiClaseBase{} .class public interface IMiInterface{} //Definicion de tipos heredados | implementados .class public MiClaseDerivada extends MiNamespace.MiClaseBase implements MiNamespace.IMiInterface{} //Definicion de una estructura .class public sealed MiEstructura1 extends [mscorlib]System.ValueType{} .class public value MiEstructura2{} //Definicion de enums .class public sealed MiEnum1 extends [mscorlib]System.Enum{} .class public enum MiEnum2{} }
|
|
|
En línea
|
|
|
|
|
JuanK_Solocodigo
|
teniendo instalado el .net framework sdk:
ilasm /exe ensamblado.il
las librerias
ilasm /dll ensamblado.il
eso es lo básico desde luego hay opciones mas avanzadas para las referencias etc.
En Visual Studio no hay ninguna opcion que te permita hacer proyectos con IL, pero en Sharp Develop hay una, no muy completa pero si muy estable.
|
|
« Última modificación: 19 Agosto 2006, 05:55 am por JuanK_solocodigo »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ensamblador dlx
ASM
|
KandiZickZad
|
1
|
4,409
|
27 Noviembre 2010, 02:07 am
por theghost_te
|
|
|
Ensamblador en Microcontrolaores
« 1 2 »
Electrónica
|
Riki_89D
|
11
|
9,235
|
14 Abril 2011, 23:39 pm
por Riki_89D
|
|
|
C# o C++ o C o Ensamblador
Análisis y Diseño de Malware
|
MARTOY
|
2
|
3,730
|
12 Marzo 2012, 03:14 am
por MARTOY
|
|
|
ensamblador y C
Programación C/C++
|
nadin
|
0
|
1,456
|
2 Junio 2013, 03:19 am
por nadin
|
|
|
Ensamblador y C
Programación C/C++
|
nadin
|
7
|
3,657
|
5 Junio 2013, 16:01 pm
por 0xDani
|
|