Top Banner
EL UTILITARIO DEBUG Ing. Fernando Monrroy UAGRM enero de 2011
25

Debug utilitario dos

Jul 11, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Debug utilitario dos

EL UTILITARIO DEBUG

Ing. Fernando Monrroy

UAGRM enero de 2011

Page 2: Debug utilitario dos

Inicie aquí

(o escriba cmd en ejecutar)

Page 3: Debug utilitario dos

Microsoft Windows [Versión 6.0.6000]

Copyright (c) 2006 Microsoft Corporation. Reservados todos los derechos.

C:\Users\Fernando>d:

D:\>md inf221

D:\>cd inf221

D:\inf221>debug

-

Para cambiar a la unidad D

Para crear carpeta INF221

Para cambiar a la carpeta INF221

Iniciar Debug

Prompt de DEBUG

Page 4: Debug utilitario dos

-?

assemble A [address]

compare C range address

dump D [range]

enter E address [list]

fill F range list

go G [=address] [addresses]

hex H value1 value2

input I port

load L [address] [drive] [firstsector] [number]

move M range address

name N [pathname] [arglist]

Ayuda de DEBUG

Page 5: Debug utilitario dos

output O port byte

proceed P [=address] [number]

quit Q

register R [register]

search S range list

trace T [=address] [value]

unassemble U [range]

write W [address] [drive] [firstsector] [number]

allocate expanded memory XA [#pages]

deallocate expanded memory XD [handle]

map expanded memory pages XM [Lpage] [Ppage]

display expanded memory status XS

-

Ayuda de DEBUG

Page 6: Debug utilitario dos

-r

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=179D ES=179D SS=179D CS=179D IP=0100 NV UP EI PL NZ NA PO NC

179D:0100 0000 ADD [BX+SI],AL DS:0000=CD

-

El comando r, por

si solo despliega el

contenido de los

registros del

procesador

De propósito

general Punteros e Índices

De Segmento

Puntero de

InstruccionesBanderas

Page 7: Debug utilitario dos

-r ax

AX 0000

:1234

-r bx

BX 0000

:89ab

-r

AX=1234 BX=89AB CX=0000 DX=0000 SP

DS=179D ES=179D SS=179D CS=179D IP

179D:0100 0000 ADD [BX+SI

-

Seguido del nombre de un registro, permite modificar su

contenido

Page 8: Debug utilitario dos

-d

1000:0200 42 32 00 00 C7 00 00 00-47 12 00 00 C7 00 00 00 B2......G.......

1000:0210 4C 12 00 00 C7 00 00 00-51 12 00 00 C7 00 00 00 L.......Q.......

1000:0220 56 12 00 00 C7 00 00 00-5B 12 00 00 C7 00 00 00 V.......[.......

1000:0230 60 12 00 00 C7 00 00 00-65 12 00 00 C7 00 00 00 `.......e.......

1000:0240 6A 12 00 00 C7 00 00 00-6F 12 00 00 C7 00 00 00 j.......o.......

1000:0250 74 12 00 00 C7 00 00 00-79 12 00 00 C7 00 00 00 t.......y.......

1000:0260 7E 12 00 00 C7 00 00 00-83 12 00 00 C7 00 00 00 ~...............

1000:0270 88 12 00 00 C7 00 00 00-8D 12 00 00 C7 00 00 00 ................

-

El comando d (dump) despliega el contenido de una porción de

la memoria. Sin ningún argumento en grupos de 128 bytes por

vez

Dirección Contenido hexadecimalEn ASCII, si

corresponde

Page 9: Debug utilitario dos

-d 500 535

1785:0500 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

1785:0510 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

1785:0520 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

1785:0530 00 00 00 00 00 00 ......

-d 1234:0abc

1234:0AB0 CD 21 2E 89 .!..

1234:0AC0 1E 8F 4A 2E 89 1E 19 4A-2E 89 1E 1B 4A 8E C3 26 ..J....J....J..&

1234:0AD0 C7 06 0A 00 4F 03 26 8C-0E 0C 00 2E C4 3E A9 4A ....O.&......>.J

1234:0AE0 2E 8C 06 1F 4A 2E 89 3E-21 4A 2E 8C 06 85 56 2E ....J..>!J....V.

1234:0AF0 89 3E 83 56 2E 8C 06 81-56 2E 89 3E 7F 56 2E 8C .>.V....V..>.V..

1234:0B00 06 8F 56 2E 89 3E 8D 56-8C DB B4 50 CD 21 2E C4 ..V..>.V...P.!..

1234:0B10 3E A5 4A 26 8B 05 47 47-2E A3 09 4A 2E 8C 06 1D >.J&..GG...J....

1234:0B20 4A 2E 89 3E 11 4A C3 0E-1F BA 0A 4B 3D 02 00 74 J..>.J.....K=..t

1234:0B30 1B BA BE 4B 3D 05 00 74-13 BA 5E 4B ...K=..t..^K

-

El comando d (dump) despliega el contenido de una porción de

la memoria entre las direcciones señaladas

O a partir de la dirección indicada

Page 10: Debug utilitario dos

-e 200 37

-e 210 45 46 47

-e 220 ‘hola mundo’

-

El comando e (enter) permite escribir en la memoria

Un byte

Un grupo de bytes

Una cadena ascii

-d2001785:0200 37 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 7...............1785:0210 45 46 47 00 00 00 00 00-00 00 00 00 00 00 00 00 EFG.............1785:0220 68 6F 6C 61 20 6D 75 6E-64 6F 00 00 00 00 00 00 hola mundo......1785:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

Y si ahora desplegamos el contenido …

Page 11: Debug utilitario dos

-a 100

1785:0100 mov al,55

1785:0102 mov bh,bb

1785:0104 add al,bh

1785:0106 sub cx,bx

1785:0108

-

El comando a (assemble) habilita el ensamblador , permitiendo

ingresar instrucciones en lenguaje ensamblador, al tiempo que las

ensambla (traduce a lenguaje de máquina) en memoria

Page 12: Debug utilitario dos

-u 100

1785:0100 B055 MOV AL,55

1785:0102 B7BB MOV BH,BB

1785:0104 00F8 ADD AL,BH

1785:0106 29D9 SUB CX,BX

El comando u (unassemble) desensambla (traduce del lenguaje

de máquina al lenguaje ensamblador) una porción de memoria

Dirección Contenido

hexadecimal

Equivalente en lenguaje

ensamblador

Page 13: Debug utilitario dos

-r

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0100 NV UP EI PL NZ NA PO NC

1785:0100 B055 MOV AL,55

-t

AX=0055 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0102 NV UP EI PL NZ NA PO NC

1785:0102 B7BB MOV BH,BB

El comando t (trace) ejecuta una instrucción a la vez

La instrucción MOV AL,55 (mover el dato inmediato 55 al registro AL)

transfiere a la mitad inferior del acumulador el dato inmediato 55

Page 14: Debug utilitario dos

AX=0055 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0102 NV UP EI PL NZ NA PO NC

1785:0102 B7BB MOV BH,BB

-t

AX=0055 BX=BB00 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0104 NV UP EI PL NZ NA PO NC

1785:0104 00F8 ADD AL,BH

… ahora transfiere el dato inmediato BB a la mitad superior de BX

Page 15: Debug utilitario dos

AX=0055 BX=BB00 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0104 NV UP EI PL NZ NA PO NC

1785:0104 00F8 ADD AL,BH

-t

AX=0010 BX=BB00 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0106 NV UP EI PL NZ AC PO CY

1785:0106 29D9 SUB CX,BX

… la instrucción ADD AL,BH suma los contenidos de AL y BH y

deposita el resultado en AL … además modifica las banderas

Porque produjo

acarreo

También acarreo

auxiliar

No es ceroEs positivo

No hay

desbordamiento

55h+BBh = 110h

Page 16: Debug utilitario dos

AX=0010 BX=BB00 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0106 NV UP EI PL NZ AC PO CY

1785:0106 29D9 SUB CX,BX

-t

AX=0010 BX=BB00 CX=4500 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0108 NV UP EI PL NZ NA PE CY

… la instrucción SUB CX,BX resta los contenidos de CX y BX y

deposita el resultado en CX … además modifica las banderas

Porque produjo

acarreo

No hay acarreo

auxiliar

No es ceroEs negativo

No hay

desbordamiento

0000h-BB00h = 4500h

Page 17: Debug utilitario dos

Probemos ahora el siguiente programa

MOV AH,9

MOV DX,120

INT 21

MOV AH,1

INT 21

MOV AH , 4C

INT 21

Además escribiremos en memoria, a partir de la dirección 120

la cadena ascii “Hola mundo que hay de nuevo?

Luego ejecutamos instrucción por instrucción con el comando

t, tenga cuidado de usar p en lugar de t para ejecutar la

instrucción INT 21

Page 18: Debug utilitario dos

-A100

1785:0100 MOV AH,9

1785:0102 MOV DX,120

1785:0105 INT 21

1785:0107 MOV AH,1

1785:0109 INT 21

1785:010B MOV AH,4C

1785:010D INT 21

1785:010F

-E120 'Hola Mundo',0A,0D,'Que hay de nuevo?',0A,0D,'$'

-r ip

IP 0108

:100

-r

AX=0010 BX=BB00 CX=4500 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0100 NV UP EI PL NZ NA PE CY

1785:0100 B409 MOV AH,09

-

Para que el puntero de instrucciones apunte a 100 (dirección de la

primera instrucción )

Page 19: Debug utilitario dos

AX=0010 BX=BB00 CX=4500 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0100 NV UP EI PL NZ NA PE CY

1785:0100 B409 MOV AH,09

-t

AX=0910 BX=BB00 CX=4500 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0102 NV UP EI PL NZ NA PE CY

1785:0102 BA2001 MOV DX,0120

-t

AX=0910 BX=BB00 CX=4500 DX=0120 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0105 NV UP EI PL NZ NA PE CY

1785:0105 CD21 INT 21

-p

Hola Mundo

Que hay de nuevo?

AX=0924 BX=BB00 CX=4500 DX=0120 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0107 NV UP EI PL NZ NA PE CY

1785:0107 B401 MOV AH,01

-

Page 20: Debug utilitario dos

AX=0924 BX=0000 CX=0000 DX=0120 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0107 NV UP EI PL NZ NA PO NC

1785:0107 B401 MOV AH,01

-t

AX=0124 BX=0000 CX=0000 DX=0120 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=0109 NV UP EI PL NZ NA PO NC

1785:0109 CD21 INT 21

-p

f

AX=0166 BX=0000 CX=0000 DX=0120 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=010B NV UP EI PL NZ NA PO NC

1785:010B B44C MOV AH,4C

-t

AX=4C66 BX=0000 CX=0000 DX=0120 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1785 ES=1785 SS=1785 CS=1785 IP=010D NV UP EI PL NZ NA PO NC

1785:010D CD21 INT 21

-

Aquí presione

cualquier tecla

CUIDADO!! No ejecute

esta instrucción (la

función 4c cierra el

programa)

Page 21: Debug utilitario dos

DEBUG tiene control sobre todo el sistema, lo que haremos a

continuación es transferir el programa al disco.

Para esto lo primero es dotar al programa de un nombre (que no pase

de 8 caracteres y no incluya signos) y extensión .COM (señal de que

es ejecutable (bajo DOS), con ayuda del comando n

A continuación señalamos la cantidad de bytes del programa en el

registro contador (CX) y aseguramos que BX sea 0

Finalmente para escribir el programa hacemos uso del comando W

-n D:\inf221\hola.com-r cxCX 0000:50-rbxBX 0000:0-wWriting 00050 bytes-

Page 22: Debug utilitario dos

Observe ahora la carpeta INF221 de la unidad D

Page 23: Debug utilitario dos

Haciendo doble click sobre el ícono Hola se ejecuta el programa, y

podrá ver …

Page 24: Debug utilitario dos

También puede ejecutarse desde la línea de comandos de DOS, con

solo escribir el nombre del programa

Writing 00050 bytes-qD:\INF221>dirEl volumen de la unidad D es respaldoEl número de serie del volumen es: 9454-5398

Directorio de D:\INF221

23/01/2011 10:13 p.m. <DIR> .23/01/2011 10:13 p.m. <DIR> ..23/01/2011 11:10 p.m. 80 HOLA.COM

1 archivos 80 bytes2 dirs 14.427.561.984 bytes libres

D:\INF221>holaHola MundoQue hay de nuevo?

D:\INF221>

El comando dir despliega el contenido de la

carpeta desde donde se lo solicita

q para abandonar DEBUG

Page 25: Debug utilitario dos

Este es un buen momento para experimentar.

Atrévase:

Elabore, con ayuda de DEBUG, un programa

ejecutable que despliegue en pantalla tres líneas de

texto; en la primera un saludo, en la segunda su

nombre y apellido y en la tercera una expresión de

contento por haberlo logrado.

Hasta la próxima ….