elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ensamblador en .NET
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ensamblador en .NET  (Leído 6,286 veces)
DragonFire


Desconectado Desconectado

Mensajes: 848



Ver Perfil WWW
Ensamblador en .NET
« en: 19 Agosto 2006, 00:30 am »

Un ensamblador orientado a objetos =)

Código:
.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

Desconectado Desconectado

Mensajes: 269



Ver Perfil WWW
Re: Ensamblador en .NET
« Respuesta #1 en: 19 Agosto 2006, 00:35 am »

 :D Hola mundo. un exe
Código:
.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

Juan Carlos Ruiz
Ingeniero de Sistemas
Mi Blog Técnico
JuanK_Solocodigo

Desconectado Desconectado

Mensajes: 269



Ver Perfil WWW
Re: Ensamblador en .NET
« Respuesta #2 en: 19 Agosto 2006, 00:37 am »

Ejercicio creando una dll.

Código:
.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

Juan Carlos Ruiz
Ingeniero de Sistemas
Mi Blog Técnico
JuanK_Solocodigo

Desconectado Desconectado

Mensajes: 269



Ver Perfil WWW
Re: Ensamblador en .NET
« Respuesta #3 en: 19 Agosto 2006, 00:38 am »

 :D Una interfaz en una dll.
Código:
.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

Juan Carlos Ruiz
Ingeniero de Sistemas
Mi Blog Técnico
JuanK_Solocodigo

Desconectado Desconectado

Mensajes: 269



Ver Perfil WWW
Re: Ensamblador en .NET
« Respuesta #4 en: 19 Agosto 2006, 00:44 am »

:D Una interfaz en una dll.
Código:
.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

Juan Carlos Ruiz
Ingeniero de Sistemas
Mi Blog Técnico
Robokop


Desconectado Desconectado

Mensajes: 1.660



Ver Perfil
Re: Ensamblador en .NET
« Respuesta #5 en: 19 Agosto 2006, 02:37 am »

una duda eso como se compila , en que tipo de próyecto. :P
En línea

JuanK_Solocodigo

Desconectado Desconectado

Mensajes: 269



Ver Perfil WWW
Re: Ensamblador en .NET
« Respuesta #6 en: 19 Agosto 2006, 05:51 am »

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

Juan Carlos Ruiz
Ingeniero de Sistemas
Mi Blog Técnico
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ensamblador dlx
ASM
KandiZickZad 1 4,253 Último mensaje 27 Noviembre 2010, 02:07 am
por theghost_te
Ensamblador en Microcontrolaores « 1 2 »
Electrónica
Riki_89D 11 8,767 Último mensaje 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,535 Último mensaje 12 Marzo 2012, 03:14 am
por MARTOY
ensamblador y C
Programación C/C++
nadin 0 1,308 Último mensaje 2 Junio 2013, 03:19 am
por nadin
Ensamblador y C
Programación C/C++
nadin 7 3,351 Último mensaje 5 Junio 2013, 16:01 pm
por 0xDani
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines