Debug
Debug
Debug
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 MS-
DOS, 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
• Modos de direccionamiento
DOS TIPOS DE PROGRAMADOR
- 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)
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 A [dirección]
comparar C dirección de intervalo
volcar D [intervalo]
escribir E dirección [lista de valores]
llenar F lista de intervalos
ir G [=dirección] [direcciones]
hexadecimal H valor1 valor2
entrada I puerto
cargar L [dirección] [unidad] [primer _ sector]
[número]
mover M dirección de intervalo
nombre N [nombre _ ruta] [lista _ argumentos]
salida O byte de puerto
proceder P [=dirección] [número]
salir Q
COMANDOS
registrar R [registrar]
buscar S lista de intervalos
seguimiento T [=dirección] [valor]
desensamblar U [intervalo]
escribir W [dirección] [unidad] [primer _ sector] [número]
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:
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:
• 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.
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.