El ensamblador .NET orientado a objetos

La parte que realmente no me gusta del .NET es su facilidad para hacerle
ingeniería inversa, el ensamblador de .NET es tan apegado a su código fuente C# 
que leerlo en ensamblador es prácticamente igual a leerlo en C#.

Seguramente y sin ninguna dificultad se podría escribir herramientas que
desensamblen programas .NET y que entreguen el código fuente en C# o VS.NET y no
seria difícil, de hecho pondré los códigos en C#, BOO y Visual Basic del
ensamblador del MSGBOX, Ahora solo faltaría una herramienta que convierta el
código binario (EXE) a lenguajes fuentes .NET Existen para convertir de C# a BOO
y VB, pero aun no encuentro uno que obtenga el código fuente desde su binario.

Código en ensamblador de un MSGBOX

.assembly msgbox
{
}

.namespace msgbox
{
.class public auto ansi beforefieldinit mensaje
extends [mscorlib]System.Object
{

.method public hidebysig specialname rtspecialname
instance default void .ctor () cil managed
{

.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void object::.ctor()
IL_0006: ldstr "Hola programadores de Solo Codigo"
IL_000b: ldstr "Ventana de Mensajes"
IL_0010: ldc.i4.0
IL_0011: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult
class

[System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string,
valuetype

[System.Windows.Forms]System.Windows.Forms.MessageBoxButtons)
IL_0016: pop
IL_0017: ret
}

.method private static hidebysig
default void Main (string[] args) cil managed
{

.entrypoint

.maxstack 8
IL_0000: newobj instance void class msgbox.mensaje::.ctor()
IL_0005: pop
IL_0006: ret
}

}
}

Una imagen del programa para ver como se compila, yo use los compiladores de
Mono.NET en Windows

Ahora el código en C#

using System.Windows.Forms;
using System;

namespace msgbox
{

public class mensaje
{
public mensaje()
{
MessageBox.Show ("Hola programadores de Solo Codigo","Ventana de Mensajes",
MessageBoxButtons.OK);
}
static void Main (String[] args)
{
mensaje mensaje = new mensaje();
}

}
}

El mismo programa en BOO

namespace msgbox

import System.Windows.Forms
import System

public class mensaje:

public def constructor():
MessageBox.Show(‘Hola programadores de Solo Codigo’, ‘Ventana de Mensajes’,
MessageBoxButtons.OK)

private static def Main(args as (string)):
mensaje = mensaje()

mensaje.Main(argv)

y por que no, en Visual Basic. NET

Imports System.Windows.Forms
Imports System
Namespace msgbox
Public Class mensaje
Public Sub New()
MessageBox.Show("Hola programadores de Solo Codigo", "Ventana de Mensajes",
MessageBoxButtons.OK)
End Sub
Private Shared Sub Main(ByVal args As String())
Dim mensaje As New mensaje()
End Sub
End Class
End Namespace

Es increible la silimitud que tienen todos los lenguajes .NET, aunque no debe
ser para sorprenderse pues al final de cuentas hasta su ensamblador es orientado
a objetos y la programación orientada a objetos siempre es muy similar sin
importar la sintaxis del lenguaje que la emplea.

2 Comments

Add a Comment

Comment spam protected by SpamBam