P. 1
Debug

Debug

4.33

|Views: 13.849|Likes:
Publicado poringzepe
Que es debug, y como hacer un pequeño archivo en debug
Que es debug, y como hacer un pequeño archivo en debug

More info:

Published by: ingzepe on Oct 22, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

10/24/2013

pdf

text

original

INTRODUCCION

En esta presentación se explicara el funcionamiento del programa “DEBUG.EXE” que del MS-DOS. En primer lugar proporcionaran algunos conceptos de la palabra “DEBUG”, y su funcionalidad. Describiremos 2 tipos de programadores para el lenguaje ensamblador. Además de un poco sobre los registros el CPU. Después nos adentraremos al programa debug.exe, empezando por como se puede ingresar a él, y algunos conocimientos previos antes de ingresar. Del programa se mencionaran los comandos que se utilizan, y como utilizar ficheros “scipt”. También se menciona la entrada y salida de datos, Por último se describe un breve la realización de un pequeño programa.

CONCEPTOS
Para tener un concepto mas amplio del programa, hay que definir su nombre. BUG, significa fallo, defecto de programa. Un concepto muy usado en juegos de videojuegos.

DEBUG: " significa depurar (escrutar y eliminar fallos). La palabra ha quedado como verbo (Depurar), de la que se deriva la palabra “DEBUGGER” (depurador).

Por extensión, todos los programas y utilidades que sirven para escudriñar los datos y el código a bajo nivel, se identifican genéricamente con esta denominación.

CONCEPTOS
Con el depurador podemos revisar paso por paso la ejecución de nuestro programa, revisar como va modificándose el contenido de los registros hasta ubicar donde está el error y corregirlo.

DEBUG.EXE es un ejecutable que, hasta 2001, acompañó a todas las versiones de MSDOS, a partir del 2.0, y de Windows. Es sin duda un programa antiguo pero de enorme potencial didáctico para el principiante.

El debug de DOS nos permite, entre otras cosas, editar archivos ejecutables y hasta fungir como un tosco traductor de sentencias ensamblador a lenguaje máquina.

DOS TIPOS DE PROGRAMADOR
Para comprender mejor, se hacen distinción entre los programadores.

•Programador de aplicaciones
Se dedica a diseñar aplicaciones nivel usuario, así que su ámbito se reduce al conocimiento de: • Los registros internos del procesador, necesarios para manipular datos y direcciones de memoria • El repertorio básico de instrucciones del procesador • Modos de direccionamiento

DOS TIPOS DE PROGRAMADOR
•El programador de sistemas
Tiene a su haber otra misión, el diseño de sistemas lo más óptimo posible de explotación de los recursos del hardware para dar soporte a las aplicaciones previstas. Para realizar su tarea, debe conocer • Registro del sistema, indispensables para gestionar aspectos como el modo de operación del procesador, etc.

REGISTROS INTERNOS DEL CPU
El Intel 8086, el primero de la serie x86, dispone de varios registros que pueden clasificarse en tres grupos: • Registros de propósito general (8 registros): - De datos: AX: Acumulador BX: Base CX: Contador DX: Datos - Punteros: SP: Puntero de pila BP: Puntero de base - Índices: SI: Índice de origen DI: Índice de destino

REGISTROS INTERNOS DEL CPU
• Registros de puntero de instrucciones y registro de señalizadores (2 registros) IP: Puntero de Instrucciones Señalizadores (Flags) • Registros de segmento (3 registros) CS: Segmento de código DS: Segmento de datos SS: Segmento de pila ES: Segmento extendido Estos registros constituyen el nivel del programador de aplicaciones. Esto quiere decir que son totalmente visibles a este programador. Hay otros registros que ya no son transparentes para el programador de aplicaciones: los registros del sistema.

INICIALIZACIÓN
Para utilizarlo basta con teclear debug desde el MS-DOS o desde una ventana DOS de Windows. Aunque en este último caso algunas de sus funcionalidades más interesantes no estarán disponibles. Es importante saber que muchos usos de estas utilidades de bajo nivel, requieren un funcionamiento stand-alone, es decir, fuera de un Sistema Operativo multi-usuario, ya que éstos encapsulan y ocultan (virtualizan) muchos aspectos del hardware. Una vez que el programa está en ejecución, el indicador ("prompt") es un guión "-", indicando que el "Shell" espera recibir órdenes. Para salir basta pulsar una Q. Como muchos programas de su género, sus comandos empiezan por una letra o combinación de ellas (pueden usarse indistintamente mayúsculas o minúsculas) y ciertos parámetros opcionales (no es imprescindible separar la letra de opción de los parámetros opcionales).

COMANDOS
El comando mas sencillo es la interrogación ?, cuyo resultado es una lista resumida de las opciones disponibles

CONADOS
La traducción al español seria: ensamblar comparar volcar escribir llenar ir hexadecimal entrada cargar [número] mover nombre salida proceder salir A [dirección] C dirección de intervalo D [intervalo] E dirección [lista de valores] F lista de intervalos G [=dirección] [direcciones] H valor1 valor2 I puerto L [dirección] [unidad] [primer _ sector] M dirección de intervalo N [nombre _ ruta] [lista _ argumentos] O byte de puerto P [=dirección] [número] Q

COMANDOS
registrar buscar seguimiento desensamblar escribir R [registrar] S lista de intervalos T [=dirección] [valor] U [intervalo] W [dirección] [unidad] [primer _ sector] [número] XA [# de páginas] XD [identificador] XM [L página] [P página] [identificador] XS

asignar memoria expandida desasignar memoria expandida asignar páginas de memoria expandida mostrar estado de la memoria expandida

La mayoría de los comandos de debug ejecutan una acción y vuelven al indicador del shell, pero si es un comando largo, como puede ser mostrar un trozo grande de código, puede detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver al shell.

FICHERO SCRIPT
Una característica poco conocida, es que debug puede aceptar entradas desde un fichero "Script", que puede ser un simple fichero de texto ASCII en el que cada comando esté separado del anterior por un INTRO. Después del último, que debe ser una "Q" para salir de debug, es conveniente dejar una línea en blanco pulsando INTRO dos veces. Las líneas pueden contener comentarios. Cualquier cosa a partir del carácter punto y coma (;) hasta el final de la línea, será ignorado.

Ejemplo: ; esto es un comentario D ; aquí se mostrará algo...

FICHERO SCRIPT
Suponiendo que tengamos un fichero "Script" de nombre Ordenes.txt, puede ser utilizado como entrada para debug mediante un comando de redirección en la siguiente forma: DEBUG < Ordenes.txt También puede conseguirse que el programa redireccione la salida hacia un fichero que puede ser inspeccionado más tarde. Aunque tiene la dificultad de tener que trabajar "a ciegas", puede ser de utilidad en determinadas circunstancias. Por ejemplo, cuando se desea un volcado de determinadas zonas de la memoria. En el caso anterior podría obtenerse un fichero Result.txt con el siguiente comando: DEBUG < Ordenes.txt > Result.txt

ERRORES
Cuando debug no sabe interpretar un comando, muestra un mensaje de error y un indicador "^" debajo del comando donde esta el error.

ENTRADAS Y SALIDAS
Debug asume que los datos numéricos proporcionados son hexadecimales, y cuando se trate de direcciones de memoria, deben introducirse en forma segmentada. A su vez, los resultados son mostrados también en formato hexadecimal cuando se refieren a direcciones de memoria. Cuando se trata simplemente del contenido de ciertas posiciones de memoria, el resultado es mostrado en formato hexadecimal y en ASCII. Por ejemplo, una salida puede presentar el siguiente aspecto: 177C:0180 177C:0190 177C:01A0 177C:01B0 177C:01C0 177C:01D0 177C:01E0 177C:01F0 01 21 10 03 41 10 05 61-10 07 81 10 09 A1 10 0B .!..A..a........ C1 10 0D E1 10 0F 01 11-11 21 11 13 41 11 15 61 .........!..A..a 11 17 81 11 19 A1 11 1B-C1 11 1D E1 11 1F 01 12 ................ 21 21 12 23 41 12 25 61-12 27 81 12 29 A1 12 2B !!.#A.%a.'..)..+ C1 12 2D E1 12 2F 01 13-31 21 13 33 41 13 35 61 ..-../..1!.3A.5a 13 37 81 13 39 A1 13 3B-C1 13 3D E1 13 3F 01 14 .7..9..;..=..?.. 41 21 14 43 41 14 45 61-14 47 81 14 49 A1 14 4B A!.CA.Ea.G..I..K C1 14 4D E1 14 4F 01 15-51 21 15 53 41 15 55 61 ..M..O..Q!.SA.Ua

ENTRADAS Y SALIDAS
Cada fila muestra 16 posiciones de memoria a partir de la posición señalada por las columnas de la izquierda, que las muestran como desplazamiento:segmento. El bloque central muestra el contenido hexadecimal de cada byte, mientras que el bloque derecho contiene la representación ASCII. Por ejemplo, la 5ª fila muestra el contenido de las posiciones 177C:01C0 a 177C:01CF (ambas inclusive). Sus dos últimos bytes contienen respectivamente los caracteres 5 y a, que corresponden a las cantidades 35h y 61h del bloque central. Que como sabemos, equivalen a los decimales 53 y 97, que son precisamente los valores ASCII de los caracteres mencionados.

ENTRADAS Y SALIDAS
Por razón de que éste tipo de salida pueda ser listado a impresora, el bloque derecho no contiene en realidad la representación ASCII de todos los caracteres (algunos ni siquiera tienen una representación imprimible). En realidad solo se muestran los caracteres imprimibles del primer bloque (US-ASCII). El resto está representado por un punto. No perder de vista que, a pesar de que algunas posiciones de memoria puedan contener valores cuya equivalencia ASCII sea un carácter imprimible. Esto no significa que dichas posiciones representen efectivamente tales valores para la aplicación que las utiliza. Por ejemplo, puede que en realidad, las dos posiciones de memoria mencionadas (dos octetos), en vez de los caracteres 5 y a, representen una palabra de 16 bits en formato Little Endian, que a su vez representan una cantidad entera (un número).

EJECUTABLES EN DOS
Existen dos formatos: .COM y .EXE. • El primero, .COM, es el formato original. En este formato, todo, código y datos, es puesto en un único segmento cuyo tamaño no debe exceder los 64KB. • En el segundo, .EXE, se reserva un segmento para datos, uno para código y uno para la pila. Con el debug se pueden escribir programas en formato .COM, que son bastante más pequeños. El programa debe comenzar a ejecutarse en la dirección 256 [100h], ya que los ejecutables de DOS reservan los primeros 256 bytes para colocar ahí una estructura de datos conocida como PSP, cuando es cargado en la memoria. El PSP (Program Segment Prefije: Prefijo de Segmento del Programa) contiene información que será utilizada por el cargador de DOS.

ECRIBIR UN PROGRAMA
• Tomando la explicación anterior, empezaremos escribiendo A 100 y un enter. Seguido las instrucciones mostradas en la pantalla siguiente:

ESCRIBIR UN PROGRAMA
La primera instrucción ,"jmp 108", es saltar a la localidad 108. Necesitamos un espacio para nuestra cadena. Como no sabemos el tamaño del programa y no podemos determinar al comienzo donde estará la cadena si la ponemos al final del programa, la ponemos al comienzo, y para evitar que el programa comience a ejecutarse en la cadena (lo que daría error) le pasamos por encima. La instrucción jmp 108 tiene dos bytes, reservamos 6 bytes para la cadena. Nos sobra un byte, así que escribimos "nop" en D10, un operador cero que significa No OPeración. Vemos que la dirección de la cadena es 102, así que ponemos este valor en DX, con el comando “mov”, que es equivalente al la asignación “”=de valor en programación C; luego llamamos al servicio 9 (mov ah, 9) de la interrupción 21h (int 21) para desplegar la cadena. Luego ejecutamos el servicio 10h de la interrupción 16h (que detiene la ejecución del programa) y por último regresamos a DOS con la interrupción 20h.

ESCRIBIR UN PROGRAMA
• Luego pulsamos 2 veces enter para salir de la instrucción A • Podemos probar nuestro programa con la instrucción G:

ESCRIBIR UN PROGRAMA
• Debes pulsar ENTER para salir del programa. Se desplegará: "El programa ha terminado de forma normal"

ESCRIBIR UN PROGRAMA
• Ahora debemos escribir nuestro programa a un archivo .COM en disco. Para ello empleamos la orden W [write]. Para realizar esta escritura correctamente, primero elegimos un nombre para el programa, como saludo.com. La extensión debe ser .COM, porque W no puede crear ejecutables con formato .EXE; la orden es:

ESCRIBIR UN PROGRAMA
También debemos especificar el tamaño de nuestro ejecutable. W creará un archivo con el tamaño indicado en el registro CX; así que deberíamos poner en CX el tamaño de nuestro ejecutable empleando la orden R:

ESCRIBIR UN PROGRAMA
• Por ultimo escribimos el archivo en disco

ESCRIBIR UN PROGRAMA
• Ahora nos podemos salir del debug con el “Q” y correr nuestro programa:

CONCLUSIÓN
En general la información nos da un concepto amplio del uso del programa debug.exe para aplicaciones de usuario, ya que programar sistemas es muy complejo. Hemos visto que para programar en este lenguaje hay que tener algunos conocimientos previos de los registros, además de tener una habilidad con los números hexadencimales. Se que no se explica mucho, pero la intención fue dar a conocer el programa y poder realizar un pequeño programa, no hacer un tutorial, además de que este tipo de programas es muy poco usado por su complejidad, por lo que se usan mas los de lenguaje de alto nivel.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->