Sie sind auf Seite 1von 17

El programa Debug

DEBUG
Bug" significa fallo, defecto en un programa;
"debug" significa depurar (escrutar y eliminar
fallos).
La palabra ha quedado como verbo (depurar), de la
que han derivado otras. Por ejemplo: "Debugger"
(depurador).
Por extensin, todos los programas y utilidades
que sirven para escudriar los datos y el cdigo a
bajo nivel, se identifican genricamente con esta
denominacin.

Comandos usados en el DEBUG


ensamblar
A[direccin]
comparar
Cdireccindeintervalo
volcar
D[intervalo]
escribir
Edireccin[listadevalores]
llenar
Flistadeintervalos
ir G[=direccin][direcciones]
hex
Hvalor1valor2
entrada
Ipuerto
cargar
L[direccin][unidad][primer_sector][nmero]
mover
Mdireccindeintervalo
nombre
N[nombre_ruta][lista_argumentos]
salida
Obytedepuerto
proceder
P[=direccin][nmero]
salir
Q
registrar
R[registrar]
buscar
Slistadeintervalos
seguimiento
T[=direccin][valor]
desensamblar
U[intervalo]
escribir
W[direccin][unidad][primer_sector][nmero]
asignarmemoriaexpandida
XA[#pginas]
desasignarmemoriaexpandida
XD[identificador]
asignarpginasdememoriaexpandidaXM[Lpgina][Ppgina]
[identificador]
mostrarestadodelamemoriaexpandidaXS

En ingls
-?
assemble A [address]
compareC range address
dump D [range]
enter E address [list]
fill F range list
go G [=address] [addresses]
hex H value1 value2 (Learn 2's Complement!)
input I port load L [address] [drive] [firstsector] [number]
Move M range address
name N [pathname] [arglist]
output O port byte
proceed
P [=address] [number]
quit
Q . . . . . . . . . (Learn this first!)
register
R [register]
search
S range list
trace
T [=address] [number]
unassemble
U [range]
write
W [address] [drive] [firstsector] [number]

Comando R (Register)
Este comando nos permite examinar o modificar los contenidos de los
registros internos de la CPU del 8086
La sintaxis es:
-R [NOMBRE DE REGISTRO] .....nos despliega los contenidos del registro
especificado
-R ...............nos despliega los contenidos de todos los regisTros de la cpu

los dos puntos es una


invitacin a modificar el
contenido del registro

CONTENIDOS DE LOS REGISTROS DE LA CPU


00000H
0100

IP

0CD5
0CD5
0CD5
0CD5

CS
DS
SS
ES

0000
0000
0000
0000

AX
BX
CX
DX

FFEE
0000
0000
0000

SP
BP
SI
DI

0000

Flags

MEMORIA
MEMORIA
0CD5
Segmento
Segmentode
deCdigo
Cdigo
Segmento
de
Segmento deDatos
Datos
Segmento
Segmentode
deStack
Stack
Segmento
SegmentoExtra
Extra
Activos
Activos
(64kbyte)
(64kbyte)

FFFFFH

Comando D (Dump): volcado


DD("Dump")
("Dump")permite
permiteobtener
obtenerun
unvolcado
volcadodel
del
contenido
contenidode
dela
lamemoria
memoria(de
(dedebug).
debug). La
Lasintaxis
sintaxis
acepta
aceptados
dosformas:
formas:
DD[direccin-inicial]
[direccin-inicial][L
[Lposiciones-desde-direccinposiciones-desde-direccininicial
inicial]]
DD[direccion-inicial][direccion-final]
[direccion-inicial][direccion-final]

Comando D (Dump): volcado


Sabemos que el punto de inicio de la BIOS es la direccin F000:FFF0,
y que desde esta posicin hasta el final de la memoria DOS hay 16
bytes. Puede obtenerse un volcado de estas posiciones con el
siguiente comando:
-D F000:FFF0
La salida en mi equipo es:

En este caso el comando solo muestra una lnea porque ha alcanzado el final
de la memoria. Puede verse que la fecha de la BIOS del sistema ocupa las
ltimas posiciones.

Si se ordena el volcado de una direccin, sin indicar ningn nmero de


posiciones, por defecto se toma el valor 128 (8 filas de 16 posiciones).
Si desea una cantidad distinta, hay que aadir una L ("Long") y el nmero de
posiciones, hasta un mximo de 64 KB (FFFF).Los dos comandos que siguen
son equivalentes (recuerde que 80 es el equivalente hexadecimal de 128):
D FE00:0000
D FE00:0000 L 80
He aqu el resultado:

Sabemos que esta zona corresponde al rea de la BIOS del Sistema...

Comando Enter (E)


Cargando datos ASCII en la memoria
con el comando Enter

-E DS:200 ASCII
-D DS:200 204
0CDE:0200 41 53 43 49 49

COMANDOS L (LOAD) Y Write (W)


Para leer/escribir el contenido de disco a bajo nivel mediante los prefijos L
("Load") y W ("Write"). Se utiliza la siguiente sintaxis:
L [Direccin] [Unidad] [Primer_sector] [Nmero]
W [Direccin] [Unidad] [Primer_sector] [Nmero]
El significado de los parmetros es como sigue:
Direccin: Posicin de la memoria de debug, a partir de la cual se
instalarn los datos ledos del disco, o se tomarn para el proceso de
escritura (aqu se utiliza generalmente el valor 100h).
Unidad: Valor numrico que indica la lgica a utilizar. 0 = A:; 1 = B:; 2
= C:; 3 = D:, etc
Primer sector: A partir del que se realizar la lectura, o se comenzar
a escribir.
Nmero: Nmero de sectores que se desea cargar/escribir. Como
debug no puede leer/escribir ms de 64 Kbytes (216 = 65536) y los
sectores de disco son de 512 bytes, el mximo nmero de sectores es
128 (80h). As pues, el valor mximo aqu es 80.

COMANDOS L (LOAD) Y Write (W)

Ejemplo: Para obtener el contenido del sector de arranque


("Master boot sector" MBR) de un disquete en A:,
utilizaremos el comando:
C:\WINDOWS>debug
- L 100 0 0 1
-D 100 L 200
Se Desplegar el contenido del sector 0 del disco A, el
de arranque

Nombrar y cargar un archivo:


N(Name) y L(Load)
Si lo que se busca est en un archivo, primero hay que cargarlo. Lo que
se puede hacer de dos formas: en la propia invocacin de debug, o
mediante los comandos N y L.
Por ejemplo, si queremos inspeccionar el contenido del fichero
more.com, podemos utilizar dos formas:
C:\WINDOWS>debug c:\windows\command\more.com
C:\WINDOWS>debug
- N c:\windows\command\more.com
-L
La sintaxis para el prefijo N es:
N [path-name]nombre-de-archivo
En ambos casos el contenido del archivo ser cargado en memoria y
podr ser utilizado.

COMPROBAR EL TAMAO DEL


ARCHIVO CARGADO
Para ello usamos la opcin R (ver estado de los registros) y obtenemos el
siguiente resultado:
-R
AX=0000 BX=0000 CX=2917 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=17A7 ES=17A7 SS=17A7 CS=17A7 IP=0100 NV UP EI PL NZ NA PO NC
17A7:0100 E8CD0F CALL 10D0
Aqu nos interesa especialmente el contenido del registro CX,
CX cuyo valor, 2917h
(1519d) en este caso, seala el tamao del fichero en bytes. Tambin podamos
haber utilizado directamente el comando
R CX que nos proporciona el valor de dicho registro:
-R CX
CX 2917
:
-

Comando S ("Search").
Existen dos sintaxis alternativas:
S [direccin-de-inicio] [L longitud-a-explorar] [contenido-a-buscar]
S [direccin-de-inicio] [direccin-final L] [contenido-a-buscar]
El contenido a buscar debe darse en hexadecimal o entre comillas si es un
texto ASCII.
Por ejemplo:
Se desea ver algunas caractersticas de la BIOS en un equipo IBM. Se que
estos datos se alojan a partir de la posicin F000:0000 hasta el final de la
memoria. Es decir, una longitud de 64 Kbytes (FFFF) a partir de la posicin de
inicio, y que seguramente, los datos buscados estarn cerca de la identificacin
de la propia BIOS (la cadena "IBM"). Por lo que utilizo la siguiente sintaxis:
-S F000:0000 L FFFF "IBM"

Comando S ("Search").
y obtendramos la siguiente salida:
F000:3A0C
F000:3A70
F000:3B13
F000:4839
F000:48BA
F000:492A
F000:499A
F000:4A0A
con las direcciones donde se ha encontrado la
ocurrencia buscada

El 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. Despus del ltimo,
que debe ser una "Q" para salir de debug, es conveniente dejar una lnea en blanco pulsando
INTRO dos veces.
Las lneas pueden contener comentarios. Cualquier cosa a partir del carcter punto y coma (;) hasta
el final de la lnea, ser ignorado.
; esto es un comentario
D ; aqu se mostrar algo...
Suponiendo que tengamos un fichero "Script" de nombre Ordenes.txt, puede ser utilizado como
entrada para debug mediante un comando de redireccin en la siguiente forma:
DEBUG < Ordenes.txt
Tambin puede conseguirse que el programa redireccione la salida hacia un fichero que puede ser
inspeccionado ms 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 podra obtenerse un fichero Result.txt con el siguiente
comando:
DEBUG < Ordenes.txt > Result.txt

Das könnte Ihnen auch gefallen