debug utilitario dos
Post on 11-Jul-2015
1.919 Views
Preview:
TRANSCRIPT
EL UTILITARIO DEBUG
Ing. Fernando Monrroy
UAGRM enero de 2011
Inicie aquí
(o escriba cmd en ejecutar)
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
-?
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
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
-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
-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
-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
-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
-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 …
-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
-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
-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
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
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
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
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
-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 )
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
-
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)
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-
Observe ahora la carpeta INF221 de la unidad D
Haciendo doble click sobre el ícono Hola se ejecuta el programa, y
podrá ver …
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
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 ….
top related