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

Debug utilitario dos

Embed Size (px)

Citation preview

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 ….