el programa debug. debug “bug" significa fallo, defecto en un programa; "debug"...

17
El programa Debug El programa Debug

Upload: teobaldo-casto

Post on 22-Jan-2016

235 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

El programa DebugEl programa Debug

Page 2: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

DEBUG

““Bug" significa fallo, defecto en un programa;Bug" significa fallo, defecto en un programa; "debug" significa depurar (escrutar y eliminar "debug" significa depurar (escrutar y eliminar

fallos).fallos). La palabra ha quedado como verbo (depurar), de la La palabra ha quedado como verbo (depurar), de la

que han derivado otras. Por ejemplo: "Debugger" que han derivado otras. Por ejemplo: "Debugger" (depurador). (depurador).

Por extensión, todos los programas y utilidades Por extensión, todos los programas y utilidades que sirven para escudriñar los datos y el código a que sirven para escudriñar los datos y el código a bajo nivel, se identifican genéricamente con esta bajo nivel, se identifican genéricamente con esta denominación. denominación.

Page 3: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

Comandos usados en el DEBUGensamblar    ensamblar     A [dirección] A [dirección]comparar      comparar      C dirección de intervalo C dirección de intervalovolcar        volcar        D [intervalo] D [intervalo]escribir     escribir      E dirección [lista de valores] E dirección [lista de valores]llenar       llenar        F lista de intervalos F lista de intervalosir            ir            G [=dirección] [direcciones] G [=dirección] [direcciones]hex           hex           H valor1 valor2 H valor1 valor2entrada       entrada       I puerto I puertocargar        cargar        L [dirección] [unidad] [primer_sector] [número] L [dirección] [unidad] [primer_sector] [número]mover         mover         M dirección de intervalo M dirección de intervalonombre       nombre        N [nombre_ruta] [lista_argumentos] N [nombre_ruta] [lista_argumentos]salida        salida        O byte de puerto O byte de puertoproceder     proceder      P [=dirección] [número] P [=dirección] [número]salir       salir            Q Qregistrar     registrar     R [registrar] R [registrar]buscar        buscar        S lista de intervalos S lista de intervalosseguimiento   seguimiento   T [=dirección] [valor] T [=dirección] [valor]desensamblar  desensamblar  U [intervalo] U [intervalo]escribir      escribir      W [dirección] [unidad] [primer_sector] [número] W [dirección] [unidad] [primer_sector] [número]asignar memoria expandida              asignar memoria expandida              XA [#páginas]XA [#páginas]desasignar memoria expandida           desasignar memoria expandida           XD [identificador]XD [identificador]asignar páginas de memoria expandida   XM [Lpágina] [Ppágina]asignar páginas de memoria expandida   XM [Lpágina] [Ppágina][identificador][identificador]mostrar estado de la memoria expandida XSmostrar estado de la memoria expandida XS

Page 4: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

En inglésEn inglés

-? assemble A [address]compareC range addressdump D [range]enter E address [list] fill F range listgo G [=address] [addresses] hex H value1 value2 (Learn 2's Complement!) input I port load L [address] [drive] [firstsector] [number] Move M range addressname 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]

Page 5: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

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

los dos puntos es una invitación a modificar el contenido del registro

Page 6: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

CONTENIDOS DE LOS REGISTROS DE LA CPUCONTENIDOS DE LOS REGISTROS DE LA CPU

MEMORIAMEMORIA

Segmento de CódigoSegmento de DatosSegmento de StackSegmento ExtraActivos (64kbyte)

Segmento de CódigoSegmento de DatosSegmento de StackSegmento ExtraActivos (64kbyte)

01000100

0CD50CD50CD50CD50CD50CD50CD50CD5

00000000000000000000000000000000

FFEEFFEE000000000000000000000000

00000000 Flags

DISIBPSP

DXCXBXAX

ESSSDSCS

IP

0CD5

FFFFFH

00000H

Page 7: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

D ("Dump") permite obtener un volcado del contenido de la memoria (de debug).  La sintaxis acepta dos formas:

D [dirección-inicial] [L posiciones-desde-dirección-D [dirección-inicial] [L posiciones-desde-dirección-inicial ]inicial ]D [direccion-inicial][direccion-final]D [direccion-inicial][direccion-final]

D ("Dump") permite obtener un volcado del contenido de la memoria (de debug).  La sintaxis acepta dos formas:

D [dirección-inicial] [L posiciones-desde-dirección-D [dirección-inicial] [L posiciones-desde-dirección-inicial ]inicial ]D [direccion-inicial][direccion-final]D [direccion-inicial][direccion-final]

Comando D (Dump): volcadoComando D (Dump): volcado

Page 8: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

Comando D (Dump): volcadoComando D (Dump): volcadoSabemos que el punto de inicio de la BIOS es la dirección F000:FFF0,

y que desde esta posición hasta el final de la memoria DOS hay 16 bytes.  Puede obtenerse un volcado de estas posiciones con el siguiente comando:

-D F000:FFF0-D F000:FFF0

La salida en mi equipo es:

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

Page 9: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

• Si se ordena el volcado de una dirección, sin indicar ningún número de posiciones, por defecto se toma el valor 128 (8 filas de 16 posiciones). 

• Si desea una cantidad distinta, hay que añadir una L ("Long") y el número de posiciones, hasta un máximo de 64 KB (FFFF).Los dos comandos que siguen son equivalentes (recuerde que 80 es el equivalente hexadecimal de 128):

D FE00:0000D FE00:0000 L 80He aquí el resultado:

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

Page 10: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

Comando Enter (E)Comando Enter (E)

• Cargando datos ASCII en la memoria con el comando Enter

--E DS:200 “ASCII”E DS:200 “ASCII”

-D DS:200 204-D DS:200 204

0CDE:0200 41 53 43 49 490CDE:0200 41 53 43 49 49

Page 11: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

COMANDOS L (LOAD) Y Write (W)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 [Dirección] [Unidad] [Primer_sector] [Número]

W [Dirección] [Unidad] [Primer_sector] [Número]

El significado de los parámetros es como sigue:

Dirección: Posición de la memoria de debug, a partir de la cual se instalarán los datos leídos del disco, o se tomarán para el proceso de escritura (aquí se utiliza generalmente el valor 100h).

Unidad: Valor numérico que indica la lógica 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.

Número: Número de sectores que se desea cargar/escribir. Como debug no puede leer/escribir más de 64 Kbytes (216 = 65536) y los sectores de disco son de 512 bytes, el máximo número de sectores es 128 (80h). Así pues, el valor máximo aquí es 80.

Page 12: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

COMANDOS L (LOAD) Y Write (W)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

Page 13: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

Nombrar y cargar un archivo:Nombrar y cargar un archivo: N(Name) y L(Load) 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 invocación 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.comC:\WINDOWS>debug c:\windows\command\more.com

C:\WINDOWS>debugC:\WINDOWS>debug- N c:\windows\command\more.com- N c:\windows\command\more.com

- L- L

La sintaxis para el prefijo N es:

N [path-name]nombre-de-archivoN [path-name]nombre-de-archivo

En ambos casos el contenido del archivo será cargado en memoria y podrá ser utilizado.

Page 14: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

COMPROBAR EL TAMAÑO DEL COMPROBAR EL TAMAÑO DEL ARCHIVO CARGADOARCHIVO CARGADO

Para ello usamos la opción R (ver estado de los registros) y obtenemos el siguiente resultado:

-R-RAX=0000 BX=0000 CX=2917 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000AX=0000 BX=0000 CX=2917 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=17A7 ES=17A7 SS=17A7 CS=17A7 IP=0100 NV UP EI PL NZ NA PO NCDS=17A7 ES=17A7 SS=17A7 CS=17A7 IP=0100 NV UP EI PL NZ NA PO NC17A7:0100 E8CD0F CALL 10D017A7:0100 E8CD0F CALL 10D0--

Aquí nos interesa especialmente el contenido del registro CXregistro CX, cuyo valor, 2917h (1519d) en este caso, señala el tamaño del fichero en bytes. También podíamos haber utilizado directamente el comando

R CX que nos proporciona el valor de dicho registro:

-R CX-R CXCX 2917CX 2917::--

Page 15: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

Comando SComando S ("Search"). ("Search").

Existen dos sintaxis alternativas:

S [dirección-de-inicio] [L longitud-a-explorar] [contenido-a-buscar]

S [dirección-de-inicio] [dirección-final L] [contenido-a-buscar]

El contenido a buscar debe darse en hexadecimal o entre comillas si es un texto ASCII.

Por ejemplo:Por ejemplo:

Se desea ver algunas características de la BIOS en un equipo IBM. Se que estos datos se alojan a partir de la posición F000:0000 hasta el final de la memoria. Es decir, una longitud de 64 Kbytes (FFFF) a partir de la posición de inicio, y que seguramente, los datos buscados estarán cerca de la identificación de la propia BIOS (la cadena "IBM"). Por lo que utilizo la siguiente sintaxis:

-S F000:0000 L FFFF "IBM"-S F000:0000 L FFFF "IBM"

Page 16: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

Comando SComando S ("Search"). ("Search").

y obtendríamos la siguiente salida:

F000:3A0CF000:3A70F000:3B13F000:4839F000:48BAF000:492AF000:499AF000:4A0A

con las direcciones donde se ha encontrado la ocurrencia buscada

Page 17: El programa Debug. DEBUG  “Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado

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

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 redirección en la siguiente forma:

DEBUG < Ordenes.txtDEBUG < Ordenes.txt

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.txtDEBUG < Ordenes.txt > Result.txt