{"id":58,"date":"2006-08-19T12:54:15","date_gmt":"2006-08-19T17:54:15","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=58"},"modified":"2006-08-22T20:46:05","modified_gmt":"2006-08-23T01:46:05","slug":"el-ensamblador-net-orientado-a-objetos","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=58","title":{"rendered":"El ensamblador .NET orientado a objetos"},"content":{"rendered":"<p>La parte que realmente no me gusta del .NET es su facilidad para hacerle<br \/>\ningenier\u00eda inversa, el ensamblador de .NET es tan apegado a su c\u00f3digo fuente C#&nbsp;<br \/>\nque leerlo en ensamblador es pr\u00e1cticamente igual a leerlo en C#.<\/p>\n<p>Seguramente y sin ninguna dificultad se podr\u00eda escribir herramientas que<br \/>\ndesensamblen programas .NET y que entreguen el c\u00f3digo fuente en C# o VS.NET y no<br \/>\nseria dif\u00edcil, de hecho pondr\u00e9 los c\u00f3digos en C#, BOO y Visual Basic del<br \/>\nensamblador del MSGBOX, Ahora solo faltar\u00eda una herramienta que convierta el<br \/>\nc\u00f3digo binario (EXE) a lenguajes fuentes .NET Existen para convertir de C# a BOO<br \/>\ny VB, pero aun no encuentro uno que obtenga el c\u00f3digo fuente desde su binario.<\/p>\n<p>C\u00f3digo en ensamblador de un MSGBOX<\/p>\n<p>.assembly msgbox<br \/>\n{<br \/>\n}<\/p>\n<p>.namespace msgbox<br \/>\n{<br \/>\n.class public auto ansi beforefieldinit mensaje<br \/>\nextends [mscorlib]System.Object<br \/>\n{<\/p>\n<p>\n.method public hidebysig specialname rtspecialname <br \/>\ninstance default void .ctor () cil managed <br \/>\n{<\/p>\n<p>.maxstack 8<br \/>\nIL_0000: ldarg.0 <br \/>\nIL_0001: call instance void object::.ctor()<br \/>\nIL_0006: ldstr &quot;Hola programadores de Solo Codigo&quot;<br \/>\nIL_000b: ldstr &quot;Ventana de Mensajes&quot;<br \/>\nIL_0010: ldc.i4.0 <br \/>\nIL_0011: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult<br \/>\nclass <\/p>\n<p>[System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string,<br \/>\nvaluetype <\/p>\n<p>[System.Windows.Forms]System.Windows.Forms.MessageBoxButtons)<br \/>\nIL_0016: pop <br \/>\nIL_0017: ret <br \/>\n} <\/p>\n<p>\n.method private static hidebysig <br \/>\ndefault void Main (string[] args) cil managed <br \/>\n{<\/p>\n<p>.entrypoint<\/p>\n<p>.maxstack 8<br \/>\nIL_0000: newobj instance void class msgbox.mensaje::.ctor()<br \/>\nIL_0005: pop <br \/>\nIL_0006: ret <br \/>\n} <\/p>\n<p>} <br \/>\n}<\/p>\n<p>Una imagen del programa para ver como se compila, yo use los compiladores de<br \/>\nMono.NET en Windows<\/p>\n<p>\n<img loading=\"lazy\" decoding=\"async\" border=\"0\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/ilasm.jpg\" width=\"665\" height=\"740\"\/><\/p>\n<p>Ahora el c\u00f3digo en C#<\/p>\n<p>using System.Windows.Forms;<br \/>\nusing System;<\/p>\n<p>namespace msgbox<br \/>\n{<\/p>\n<p>public class mensaje<br \/>\n{<br \/>\npublic mensaje()<br \/>\n{<br \/>\nMessageBox.Show (&quot;Hola programadores de Solo Codigo&quot;,&quot;Ventana de Mensajes&quot;,<br \/>\nMessageBoxButtons.OK);<br \/>\n}<br \/>\nstatic void Main (String[] args)<br \/>\n{<br \/>\nmensaje mensaje = new mensaje();<br \/>\n}<\/p>\n<p>}<br \/>\n}<\/p>\n<p>El mismo programa en BOO<\/p>\n<p>namespace msgbox<\/p>\n<p>import System.Windows.Forms<br \/>\nimport System<\/p>\n<p>public class mensaje:<\/p>\n<p>public def constructor():<br \/>\nMessageBox.Show(&#8216;Hola programadores de Solo Codigo&#8217;, &#8216;Ventana de Mensajes&#8217;,<br \/>\nMessageBoxButtons.OK)<\/p>\n<p>private static def Main(args as (string)):<br \/>\nmensaje = mensaje()<\/p>\n<p>mensaje.Main(argv)<\/p>\n<p>y por que no, en Visual Basic. NET<\/p>\n<p>Imports System.Windows.Forms<br \/>\nImports System<br \/>\nNamespace msgbox<br \/>\nPublic Class mensaje<br \/>\nPublic Sub New()<br \/>\nMessageBox.Show(&quot;Hola programadores de Solo Codigo&quot;, &quot;Ventana de Mensajes&quot;,<br \/>\nMessageBoxButtons.OK)<br \/>\nEnd Sub<br \/>\nPrivate Shared Sub Main(ByVal args As String())<br \/>\nDim mensaje As New mensaje()<br \/>\nEnd Sub<br \/>\nEnd Class<br \/>\nEnd Namespace<\/p>\n<p>Es increible la silimitud que tienen todos los lenguajes .NET, aunque no debe<br \/>\nser para sorprenderse pues al final de cuentas hasta su ensamblador es orientado<br \/>\na objetos y la programaci\u00f3n orientada a objetos siempre es muy similar sin<br \/>\nimportar la sintaxis del lenguaje que la emplea.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La parte que realmente no me gusta del .NET es su facilidad para hacerle ingenier\u00eda inversa, el ensamblador de .NET es tan apegado a su c\u00f3digo fuente C#&nbsp; que leerlo en ensamblador es pr\u00e1cticamente igual a leerlo en C#. Seguramente y sin ninguna dificultad se podr\u00eda escribir herramientas que desensamblen programas .NET y que entreguen&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/58","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=58"}],"version-history":[{"count":0,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/58\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}