Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Viendo lo Invisible

–Como Desplegar el Contenido de los Registros Generales–

Hace mucho alguien me dijo que programar era como ver el mundo a traves de un tubo de papel higiénico. Esto es particularmente cierto para los códigos fuente. Sean del lenguaje que sean. Sin embargo, esta vez se trata de algo diferente. Pues esta es la continuación de la nota llamada ‘Piel Transparente’. Si entendieron mi código de seguro ya son capaces de ver un valor de 32 bits en hexadecimal a la vez. (Y si no lo entendieron espero tener la paciencia para escribir un código mucho mas estructurado). Veamos ahora un poco mas de lo que pueden hacer tan solo con las funciones ‘bin2asc’ y MessageBox:

regs

Como ya dije en la nota ASCII-zofrenia. El código Ascii no solo representa letras y números, sino signos de puntuación y valores de control y edición de texto. Y la función de la API de Win32 puede interpretar la mayoría de estos valores. Por ejemplo. Si el cero final de una cadena ASCII-Z lo cambiamos por el par de bytes 0dh, 0ah. Que representan 13 y 10 en decimal, conseguimos escribir en lineas separadas. Por ejemplo, en esta imagen se muestra una caja de texto que despliega los 8 registros generales de un procesador Intel. En realidad, MessageBox solo toma una cadena ASCII-Z y la despliega en varias lineas. Si ustedes son programadores mas o menos competentes serán capaces de crear cualquier caja de texto con información del sistema, y si apenas están aprendiendo y me encuentran de buen humor, puede que les muestre el código para hacerlas.

Otra cosa que puede hacerse es desplegar una sección de la memoria de esta misma forma. En esta otra ventana se muestra como. Esta función es bastante mas dificil de hacer que la que despliega los registros. Pues esta función implementa un buffer relativamente grande en el Stack donde crea la cadena que es enviada a MessageBox. Como es de esperarse, esta función depende de ‘bin2asc’ y de otra función que pega una cadena AsciiZ al final de otra (APPEND como diría un DBA). Esta técnica es especialmente importante para aplicaciones que construyen frases a partir de cadenas de texto, o como en este caso, para funciones que convierten numeros binarios a cadenas de texto representable en la pantalla de la computadora.

En general, es posible hacer casi cualquier ventana de información básica mezclando las funciones MessageBox, bin2asc y uniendo cadenas Ascii-z. Solo recuerden estos puntos importantes a considerar:

*PUSHA Y POPA. Este par de instrucciones se usan para guardar los 8 registros generales (Vel los 8 jinetes del Apocalipsis) de un solo golpe. Esto es especialmente importante con ESP y EBP

*Cuando adjunten una cadena ascii-z a otra cadena previa asegurense que la cadena que recibe tenga suficiente espacio para recibir el ‘apéndice’ o de lo contrario pueden sobreescribir otra sección de segmento de código o peor aún, desatar el famoso Fallo de Protección General. Que no por nada es la excepción 13.

*MessageBox tiene un límite en cuanto a la longitud de la cadena que puede representar. No lo he medido con exactitud pero ronda 1os 256 bytes.

*No se olviden que una cadena Ascii-z termina en cero binario. Y no confundan el cero binario (0) con el cero ascii (30h = 48)

Bueno, espero que esto sea suficiente para que puedan experimentar con código en Ensamblador sin necesidad de un emulador o depurador de código. Por ahora los dejo porque me acabo de encontrar una nueva página de desarrollo de videojuegos (la página es nueva pero fue fundada por los mismos lamers de siempre) y quiero fastidiarlos ahorita que están desprevenidos. Ya les informaré de como me fue en esta pequeña aventura.

Anuncios

marzo 15, 2009 - Posted by | Uncategorized | , , , ,

7 comentarios »

  1. me pregunto que demonios le pasa al sistema de mensajes. Esta dandole cran a todos los mensajes que llegan y ni siquiera me dice de que se trataban. Al menos deberian tener un ‘junk folder’ como el de los correos para al menos reirme de la desesperacion de los vendedores de celulares

    Comentario por mario (asm86) | marzo 16, 2009 | Responder

  2. programando en windows bestia….
    que asco….

    saludos mister satan de la programacion en ensamblador.

    Comentario por XOR DEUS, DEUS | marzo 31, 2009 | Responder

    • No dudes que Windows Vista es un asco. Sobre todo porque en el Service Pack 1 confunde todo codigo menor a 100k con un virus. Pero esto es como cuando te quejas del servicio de la aerolinea y la sobrecargo te dice: –Si no te gusta ahi esta la puerta–

      Comentario por asm86 | marzo 31, 2009 | Responder

    • “Windows bestia” Eso existe?

      Comentario por seba83888 | noviembre 26, 2016 | Responder

  3. ieee 754 (floating point) to decimal en ensamblador (32 bits) sera q ud proporciona informacion al respecto… algun ejemplo .ASM

    gracias!

    Comentario por 09 | abril 30, 2009 | Responder

    • Bienvenido a este blog sobre Ensamblador! De hecho habia pensado escribir algo sobre el punto flotante (o coma flotante como dirian otros). Es bueno ver que la gente se interesa por temas como este. Echa una mirada al blog para leer la primer entrada sobre el punto flotante.

      Comentario por asm86 | mayo 1, 2009 | Responder

  4. Aun todos estan vivos?

    Comentario por Alexander | enero 9, 2015 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: