benemérita universidad autónoma de puebla facultad de ciencias

Anuncio
BENEMÉRITA UNIVERSIDAD AUTÓNOMA
DE PUEBLA
FACULTAD DE CIENCIAS DE LA
COMPUTACIÓN
PRÁCTICA DE LABORATORIO No I
NOMBRE DE LA PRÁCTICA:
COMANDOS BÁSICOS DE DEBUG( PARTE I)
OBJETIVO: APRENDER LOS COMANDOS BÁSICOS DE UN DEPURADOR
DINÁMICO
DESARROLLO DE LA PRÁCTICA:
DEBUG
"Bug" significa fallo, defecto en un programa; "debug" significa depurar (escrutar y
eliminar fallos), "Debugger" (depurador).
Sinopsis
DEBUG.EXE es un ejecutable que, hasta 2001, acompañó a todas las versiones de MSDOS, a partir de la 2.0, y de Windows.
Se trata de una utilidad interactiva de exploración de bajo nivel, pero que también puede
utilizarse para ciertas funciones. Por ejemplo: ensamblador a lenguaje máquina. Para
utilizarlo basta invocarlo desde MS-DOS o desde una ventana DOS de Windows.
Opciones
Una vez que el programa está en ejecución, el indicador ("prompt") es un guión "-",
indicando que el "Shell" espera recibir órdenes. La opción más sencilla es la
interrogación ?, cuyo resultado es una lista resumida de las opciones disponibles:
Autor :Marcos González Flores
Página 1
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]
hex
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
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]
asignar memoria expandida
XA [#páginas]
desasignar memoria expandida
XD [identificador]
asignar páginas de memoria expandida XM [Lpágina] [Ppágina] [identificador]
mostrar estado de la memoria expandida XS
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.
Errores
Cuando debug no sabe interpretar un comando, muestra un mensaje de error y un
indicador "^" debajo del sitio del comando donde está el error.
Comandos
Comencemos:
El comando 'H' : la instrucción "H <op_1> <op_2>" devuelve la suma y la resta (
en hexadecimal) de los dos operandos suministrados.
Donde op1 y op2 significan operandos.
Parámetros: 2 números hexadecimales de 4 dígitos (máximo)
Autor :Marcos González Flores
Página 2
Uso
Resultado:
<resultado_1>; Es la suma (<op_1> + <op_2>)
<resultado_2>; es la resta (<op_1> - <op_2>)
Ejemplo:
-h 0003 0002
0005 0001
-h 0000 0001
0001 FFFF,
como se observa el resultado de la segunda operación es FFFF, que es el equivalente en
complemento a 2 de -1
El comando 'R' : muestra o modifica registros
Parámetros: [registro]
Resultado: Si especificamos un registro, DEBUG nos permite modificar el contenido de
ese registro, si no lo hemos especificado, presenta por pantalla el contenido de los
registros principales del procesador, además muestra la instrucción apuntada por CS:IP
Registro de flags:
NV UP EI PL NZ NA PO NC
Desbordamiento
Poner: OV Quitar: NV
Autor :Marcos González Flores
Página 3
Direccion(reducción/incremento)
poner: DN quitar UP
Interrupción(activar/desactivar)
poner: EI quitar: DI
Signo (negativo / positivo)
poner: NG quitar: PL
Cero ( sí / no)
poner: ZR quitar: NZ
Acarrero Auxiliar ( sí / no )
poner: AC quitar: NA
Paridad ( par / impar )
poner: PE quitar: PO
Acarreo (sí / no )
poner: CY quitar: NC
Ejemplo 1:
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2048 ES=2048 SS=2048 CS=2048 IP=0100 NV UP EI PL NZ NA PO NC
2048:0100 92 XCHG DX,AX
Ejemplo 2 :
-r ax
AX 0000
:01
-r
AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2048 ES=2048 SS=2048 CS=2048 IP=0100 NV UP EI PL NZ NA PO NC
2048:0100 92 XCHG DX,AX
El comando 'E' ( escribir en memoria )
Parámetros: <dir_comienzo> [lista de palabras a escribir]
Resultados: Se escribe a partir de la dirección de memoria DS:<dir_comienzo> la lista
de palabras (dos dígitos hexadecimales) del segundo parámetro. Si no se especifica un
segundo parámetro entonces DEBUG no permite introducir palabra a palabra los datos
que queramos, a partir de la dirección DS:<dir_comienzo>. Podemos pasar a la palabra
siguiente de memoria presionando la tecla ESPACIO, cuando hayamos terminado de
introducir los datos que queramos, hay que pulsar INTRO
Ejemplo:
Autor :Marcos González Flores
Página 4
-E 100
2048:0100 56.
Ejemplo 2
-E 100 00 01 02
El Comando 'T': traza o ejecuta paso a paso)
Parámetros: [< =dirección>]; Dirección a partir de la cual se quiere que se trace (OJO:
HAY QUE PONER EL '=' ) <num_instrucciones> ; Número de instrucciones que hay
que ejecutar
Resultados: se ejecutan las <NUM_instrucciones> instrucciones a partir de
CS:<direccion> ( si se ha especificado <direccion> ) o se ejecutan
<NUM_instrucciones> a partir de CS:IP, si no se especifica el parámetro
<NUM_instrucciones> se ejecuta una única instrucción
Ejemplo:
El Comando 'Q': Salir de debug
Para poder salir del programa es introduciendo el comando 'Q'
Autor :Marcos González Flores
Página 5
Ejercicios
1.- Introducir el siguiente código para la suma de 2 números:
Código de Máquina: 01D8
Asignar a AX=5
Asignar a BX=3
2.- Introducir el siguiente código para la resta de 2 números:
Código de Máquina: 29F8
Asignar a AX=5
Asignar a BX=3
3.- Introducir el siguiente código para la multiplicación de 2 números:
Código de Máquina: F7E3
Asignar a AX=5
Asignar a BX=3
4.- Introducir el siguiente código para la división de 2 números:
Código de Máquina: F7F3
Asignar a AX=8
Asignar a BX=4
5.- Utilizando los ejercicios del 1 al 4 realice un programa que genere secuencialmente
la suma, resta, multiplicación y división, en ese orden, los valores originales del registro
AX y BX son los que deseen.
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.
; esto es un comentario
R ; 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 redirección en la siguiente
forma:
DEBUG < Ordenes.txt [Enter]
Autor :Marcos González Flores
Página 6
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 [Enter]
FIN.
Autor :Marcos González Flores
Página 7
Descargar