Sunteți pe pagina 1din 9

SEP

DIRECCION GENERAL DE INSTITUTOS TECNOLOGICOS

SEIT

INSTITUTO TECNOLOGICO
de Tehuacn

Comandos de DEBUG.EXE

Alumno: Gonzlez Ramrez Jorge

Catedrtico: Felipe Rodriguez Ramirez

Ing. En Sistemas Computacionales

Tehuacn, Puebla Marzo de 2012

DEBUG Nota: "Bug" significa fallo, defecto en un programa; "debug" significa depurar (escrutar y eliminar fallos). La palabra ha quedado como verbo (depurar), de la que han derivado otras. Por ejemplo: "Debugger" (depurador). Por extensin, todos los programas y utilidades que sirven para escudriar los datos y el cdigo a bajo nivel, se identifican genricamente con esta denominacin.
1 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 . Es sin duda un programa antiguo pero de enorme potencial didctico para el principiante. En adelante nos referiremos a l como debug simplemente. Se trata de una utilidad interactiva de exploracin de bajo nivel, pero que tambin puede utilizarse para ciertas funciones. Por ejemplo, como un tosco traductor de sentencias ensamblador a lenguaje mquina. Como todos los programas de su tipo, debe utilizarse con cierto cuidado. En especial si utiliza el comando W (se puede borrar todo un disco duro con un simple comando errneo). Para utilizarlo basta invocarlo desde MS-DOS o desde una ventana DOS de Windows. Aunque en este ltimo caso algunas de sus funcionalidades ms interesantes nos estarn vetadas. Nota: Es importante recordar que muchos usos de estas utilidades de bajo nivel, requieren un funcionamiento stand-alone. Es decir, fuera de un Sistema Operativo multi usuario, ya que stos encapsulan y ocultan (virtualizan) muchos aspectos del hardware.
2 Opciones

Una vez que el programa est en ejecucin, el indicador ("prompt") es un guin "-", indicando que el "Shell" espera recibir rdenes. Para salir basta pulsar una Q. Como muchos programas de su gnero, sus comandos empiezan por una letra o combinacin de ellas (pueden usarse indistintamente maysculas o minsculas) y ciertos parmetros opcionales (no es imprescindible separar la letra de opcin de los parmetros opcionales que siguen). La opcin ms sencilla es la interrogacin ?, cuyo resultado es una lista resumida de las opciones disponibles: ensamblar comparar volcar escribir llenar ir hex entrada cargar mover nombre salida proceder A C D E F G H I L M N O P [direccin] direccin de intervalo [intervalo] direccin [lista de valores] lista de intervalos [=direccin] [direcciones] valor1 valor2 puerto [direccin] [unidad] [primer_sector] [nmero] direccin de intervalo [nombre_ruta] [lista_argumentos] byte de puerto [=direccin] [nmero]

salir Q registrar R [registrar] buscar S lista de intervalos seguimiento T [=direccin] [valor] desensamblar U [intervalo] escribir W [direccin] [unidad] [primer_sector] [nmero] asignar memoria expandida XA [#pginas] desasignar memoria expandida XD [identificador] asignar pginas de memoria expandida XM [Lpgina] [Ppgina] [identificador] mostrar estado de la memoria expandida XS La mayora de los comandos de debug ejecutan una accin y vuelven al indicador del shell, pero si es un comando largo, como puede ser mostrar un trozo grande de cdigo, puede detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver al shell. Una caracterstica 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. Despus del ltimo, que debe ser una "Q" para salir de debug, es conveniente dejar una lnea en blanco pulsando INTRO dos veces. Las lneas pueden contener comentarios. Cualquier cosa a partir del carcter punto y coma (;) hasta el final de la lnea, 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 redireccin en la siguiente forma: DEBUG < Ordenes.txt Tambin puede conseguirse que el programa redireccione la salida hacia un fichero que puede ser inspeccionado ms 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 podra obtenerse un fichero Result.txt con el siguiente comando: DEBUG < Ordenes.txt > Result.txt
3 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.
4 Entradas & Salidas

DEBUG asume que los datos numricos proporcionados son hexadecimales, y cuando se trate de direcciones de memoria, deben introducirse en forma segmentada A su vez, los resultados son mostrados tambin en formato hexadecimal cuando se refieren a direcciones de memoria. Cuando se trata simplemente del contenido de ciertas posiciones de memoria, el resultado es mostrado en formato hexadecimal y en ASCII. Por ejemplo, una salida puede presentar el siguiente aspecto: 177C:0180 01 21 10 03 41 10 05 61-10 07 81 10 09 A1 10 0B .!..A..a........

177C:0190 177C:01A0 177C:01B0 177C:01C0 177C:01D0 177C:01E0 177C:01F0

C1 10 0D E1 10 0F 01 11-11 21 11 13 41 11 15 61 .........!..A..a 11 17 81 11 19 A1 11 1B-C1 11 1D E1 11 1F 01 12 ................ 21 21 12 23 41 12 25 61-12 27 81 12 29 A1 12 2B !!.#A.%a.'..)..+ C1 12 2D E1 12 2F 01 13-31 21 13 33 41 13 35 61 ..-../..1!.3A.5a 13 37 81 13 39 A1 13 3B-C1 13 3D E1 13 3F 01 14 .7..9..;..=..?.. 41 21 14 43 41 14 45 61-14 47 81 14 49 A1 14 4B A!.CA.Ea.G..I..K C1 14 4D E1 14 4F 01 15-51 21 15 53 41 15 55 61 ..M..O..Q!.SA.Ua

Cada fila muestra 16 posiciones de memoria a partir de la posicin sealada por las columnas de la izquierda, que las muestran como desplazamiento:segmento. El bloque central muestra el contenido hexadecimal de cada byte, mientras que el bloque derecho contiene la representacin ASCII. Por ejemplo, la 5 fila muestra el contenido de las posiciones 177C:01C0 a 177C:01CF (ambas inclusive). Sus dos ltimos bytes contienen respectivamente los caracteres 5 y a, que corresponden a las cantidades 35h y 61h del bloque central. Que como sabemos, equivalen a los decimales 53 y 97, que son precisamente los valores ASCII de los caracteres mencionados. Nota: Por razn de que ste tipo de salida pueda ser listado a impresora, el bloque derecho no contiene en realidad la representacin ASCII de todos los caracteres (algunos ni siquiera tienen una representacin imprimible). En realidad solo se muestran los caracteres imprimibles del primer bloque (US-ASCII). El resto est representado por un punto. No perder de vista que, a pesar de que algunas posiciones de memoria puedan contener valores cuya equivalencia ASCII sea un carcter imprimible. Esto no significa que dichas posiciones representen efectivamente tales valores para la aplicacin que las utiliza. Por ejemplo, puede que en realidad, las dos posiciones de memoria mencionadas (dos octetos), en vez de los caracteres 5 y a, representen una palabra de 16 bits en formato Little Endian , que a su vez representan una cantidad entera (un nmero).
5 Comandos

Aunque su descripcin completa llenara todo un captulo, a continuacin comentamos algunas de las opciones ms interesantes relativas a inspeccin del cdigo y de contenidos de memoria. 5.1 La opcin D ("Dump") permite obtener un volcado del contenido de la memoria (de debug). La sintaxis acepta dos formas: D [direccin-inicial] [L posiciones-desde-direccin-inicial ] D [direccion-inicial][direccion-final] Naturalmente, para que exista algo en el bufer de memoria (al principio quizs solo contiene basura) es preciso indicarle que lea algo. Este algo puede ser un rango de direcciones de memoria RAM; una direccin absoluta de disco (sector); un fichero, o el contenido de los registros del procesador. Para empezar puede indicrsele que cargue un fichero xxx.xyz, que tenemos en el directorio actual o en el PATH, cuyo contenido queremos ver. C:\> debug xxx.xyz -D aqu se obtendra una salida anloga a la comentada . Hemos visto un ejemplo al tratar de los servicios de interrupciones del PC, aqu mostraremos

otro. Sabemos que el punto de inicio de la BIOS es la direccin F000:FFF0, y que desde esta posicin hasta el final de la memoria DOS hay 16 bytes. Puede obtenerse un volcado de estas posiciones con el siguiente comando: -D F000:FFF0 La salida en mi equipo es: F000:FFF0 CD 19 E0 00 F0 30 36 2F-33 30 2F 39 37 00 FC 38 .....06/30/97..8 En este caso el comando solo muestra una lnea porque ha alcanzado el final de la memoria. Puede verse que la fecha de la BIOS del sistema ocupa las ltimas posiciones. Si se ordena el volcado de una direccin suficientemente alejada del final de la memoria, sin indicar ningn nmero de posiciones, por defecto se toma el valor 128 (8 filas de 16 posiciones). Si desea una cantidad distinta, hay que aadir una L ("Long") y el nmero de posiciones, hasta un mximo de 64 KB (FFFF). Todos los nmeros deben ser expresados en hexadecimal. Por consiguiente los dos comandos que siguen son equivalentes (recuerde que 80 es el equivalente hexadecimal de 128): D FE00:0000 D FE00:0000 L 80 He aqu el resultado: FE00:0000 FE00:0010 FE00:0020 FE00:0030 FE00:0040 FE00:0050 FE00:0060 FE00:0070 41 77 61 72 64 20 53 6F-66 74 77 61 72 65 49 42 4D 20 43 4F 4D 50 41 54-49 42 4C 45 20 34 38 36 20 42 49 4F 53 20 43 4F-50 59 52 49 47 48 54 20 41 77 61 72 64 20 53 6F-66 74 77 61 72 65 20 49 6E 63 2E 6F 66 74 77 61-72 65 20 49 6E 63 2E 20 41 77 03 0C 04 01 01 6F-66 74 77 E9 12 14 20 43 1C 41 77 61 72 64 20 4D-6F 64 75 6C 61 72 20 42 49 4F 53 20 76 34 2E 35-31 50 47 4D 00 8E 32 EC Award SoftwareIB M COMPATIBLE 486 BIOS COPYRIGHT . Award Software I nc.oftware Inc. . Aw.....oftw... C .Award Modular B IOS v4.51PGM..2.

Sabemos que esta zona corresponde al rea de la BIOS del Sistema... 5.2 Otra opcin muy interesante nos permite buscar determinados contenidos a travs de la memoria utilizando el prefijo S ("Search"). Existen dos sintaxis alternativas: S direccion-de-inicio L longitud-a-explorar contenido-a-buscar S direccion-de-inicio direccion-final L contenido-a-buscar El contenido debe ser proporcionado en hexadecimal (tal como aparecera en la columna central del ejemplo anterior) o entre comillas si es un texto ASCII. Por ejemplo, en un equipo IBM, deseo ver algunas caractersticas de la BIOS. Se que estos datos se alojan a partir de la posicin F000:0000 hasta el final de la memoria. Es decir, una longitud de 64 Kbytes (FFFF) a partir de la posicin de inicio, y que seguramente, los datos buscados estarn cerca de la identificacin de la propia BIOS (la cadena "IBM"). Por lo que utilizo la siguiente sintaxis : -s f000:0000 L ffff "IBM" y obtengo la siguiente salida: F000:3A0C F000:3A70

F000:3B13 F000:4839 F000:48BA F000:492A F000:499A F000:4A0A con las direcciones donde se ha encontrado la ocurrencia buscada. A continuacin puedo explorar las proximidades de cada posicin. Por ejemplo para la primera: -D f000:3a00 F000:3A00 F000:3A10 F000:3A20 F000:3A30 F000:3A40 F000:3A50 F000:3A60 F000:3A70 61 73 65 20 36 2E 30 20-66 6F 72 20 49 42 4D 20 54 68 69 6E 6B 50 61 64-00 20 20 20 20 20 00 43 6F 70 79 72 69 67 68 74-20 31 39 38 35 2D 31 39 39 39 20 50 68 6F 65 6E-69 78 20 54 65 63 68 6E 6F 6C 6F 67 69 65 73 20-4C 74 64 2E 0D 41 6C 6C 20 52 69 67 68 74 73 20-52 65 73 65 72 76 65 64 0D 0D 28 43 29 20 43 4F-50 59 52 49 47 48 54 20 49 42 4D 20 43 4F 52 50-4F 52 41 54 49 4F 4E 20 ase 6.0 for IBM ThinkPad. .C opyright 1985-19 99 Phoenix Techn ologies Ltd..All Rights Reserved ..(C) COPYRIGHT IBM CORPORATION

5.3 Si lo que se busca est en un fichero, primero hay que cargarlo. Lo que se puede hacer de dos formas: en la propia invocacin 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.com C:\WINDOWS>debug - N c:\windows\command\more.com -L La sintaxis para el prefijo N es: N [path-name]nombre-de-fichero En ambos casos el contenido del fichero ser cargado en memoria y podr ser utilizado. Atencin: despus de la orden L ("Load"), debug le avisar si no encuentra el fichero, pero seguir su funcionamiento. En tal caso simplemente piensa que N seala el nombre de un nuevo fichero que crear, con el contenido de la memoria -de debug-, cuando posteriormente seleccione la opcin escribir W ("Write"). Nota: Como ya habr deducido, debug permite leer un fichero, realizar modificaciones en l (con la opcin E) y escribir el fichero modificado bajo otro nombre con N/W. A continuacin podemos comprobar el tamao del fichero cargado. Para ello usamos la opcin R (ver estado de los registros) y obtenemos el siguiente resultado: -R AX=0000 BX=0000 CX=2917 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=17A7 ES=17A7 SS=17A7 CS=17A7 IP=0100 NV UP EI PL NZ NA PO NC 17A7:0100 E8CD0F CALL 10D0 Aqu nos interesa especialmente el contenido del registro CX, cuyo valor, 2917h (1519d) en

este caso, seala el tamao del fichero en bytes. Tambin podamos haber utilizado directamente el comando R CX que nos proporciona el valor de dicho registro: -R CX CX 2917 : Nota: A continuacin del valor correspondiente, debug muestra dos puntos (:), sealando que puede cambiar el valor del registro introduciendo un nuevo nmero. Pulse INTRO para dejar las cosas como estn y volver al "prompt" (-) de debug. Al llegar a este punto, es importante sealar que, a excepcin de los ficheros .exe, debug carga los ficheros a partir de la direccin 100h (256d) de "su" memoria. De forma que el primer octeto del fichero se carga en la direccin 100; el segundo en 101; etc. En nuestro caso, el fichero se extender desde la posicin 100h hasta 2A17h (100h + 2917h). A continuacin, para buscar la cadena "Microsoft" en el fichero, utilizamos cualquiera de los siguientes comandos: - S 100 L 2917 "Microsoft" - S 100 2a17 "Microsoft" El primer comando seala el punto de inicio y el tamao de la zona a buscar; el segundo utiliza los puntos inicial y final de la exploracin. Con ambos se obtiene la misma respuesta: 17A7:1083 17A7:10B2 Truco: Debido a la forma especial en que se cargan los ejecutables .exe, si quiere inspeccionar la forma nativa de uno de estos ficheros (como es su imagen en el disco), debe hacer una copia del fichero; renombrarlo con cualquier otra terminacin (o sin ella) y cargar esta copia. En caso contrario, debug se preparar para funcionar como un verdadero depurador de tiempo de ejecucin (run-time), para lo que cargar el fichero y lo acomodar en memoria de forma que pueda ejecutarse . Como ejercicio, compruebe las distintas longitudes y aspecto (especialmente al principio) de un mismo fichero .exe cargndolo con debug de las dos formas (busque en su sistema un .exe lo ms pequeo posible). 5.4 Adems de la capacidad de leer ficheros antes mencionada, quizs una de las opciones ms interesantes (y peligrosas) de debug es la posibilidad de leer/escribir el contenido de disco a bajo nivel mediante los prefijos L ("Load") y W ("Write"). Se utiliza la siguiente sintaxis: L [Direccin] [Unidad] [Primer_sector] [Nmero] W [Direccin] [Unidad] [Primer_sector] [Nmero] El significado de los parmetros es como sigue: Direccin: Posicin de la memoria de debug, a partir de la cual se instalarn los

datos ledos del disco, o se tomarn para el proceso de escritura (aqu se utiliza generalmente el valor 100h). Unidad: Valor numrico que indica la lgica 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. Nmero: Nmero de sectores que se desea cargar/escribir. Como debug no puede leer/escribir ms de 64 Kbytes (216 = 65536) y los sectores de disco son de 512 bytes, el mximo nmero de sectores es 128 (80h). As pues, el valor mximo aqu es 80. 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

Como el resultado no cabe en una pantalla, ingeniaremos un procedimiento para conservarlo en un fichero (ms adelante nos servir para otro propsito). Para ello creamos un fichero script.txt con el siguiente contenido (dos INTRO despus de la "Q"): L 100 0 0 1 D 100 L 200 Q A continuacin invocamos debug con el comando C:\WINDOWS>debug < D:\buzon\script.txt > D:\buzon\resultad.txt

Despus de un breve parpadeo del disco y del disquete, vuelve el "prompt" del DOS. La operacin ha concluido, y en el directorio correspondiente de la unidad D: tenemos el fichero resultad.txt con el volcado del sector de arranque del disquete, adems de los "ecos" de los

comandos introducidos (los hemos mantenido para orientacin del lector).


-L 100 0 0 1 -D 100 L 200 177C:0100 177C:0110 177C:0120 177C:0130 177C:0140 177C:0150 177C:0160 177C:0170 177C:0180 177C:0190 177C:01A0 177C:01B0 177C:01C0 177C:01D0 177C:01E0 177C:01F0 177C:0200 177C:0210 177C:0220 177C:0230 177C:0240 177C:0250 177C:0260 177C:0270 177C:0280 177C:0290 177C:02A0 177C:02B0 177C:02C0 177C:02D0 177C:02E0 177C:02F0 -Q EB 02 00 4D FA 1E F3 F9 66 46 03 8B 8B 3B 75 74 BE CD 48 B1 00 33 F2 13 03 72 72 62 72 61 53 00 3E E0 00 45 33 56 A4 FB 16 FC C3 FB 76 FB 99 09 81 19 8A 04 02 D2 8A 59 18 72 20 69 65 20 59 57 90 00 00 20 C9 16 06 38 03 89 48 B1 3E 72 BE B4 7D BE 4E E8 42 F7 56 5A 01 65 45 65 73 20 53 49 2B 40 00 20 8E 55 1F 66 46 56 F7 01 F3 E5 80 0E EB 82 0D 16 4A 76 24 58 27 63 2F 20 69 20 4D 4E 79 0B 00 20 D1 BF BD 24 1C FE F3 E8 A6 EB 7D BB E0 7D F7 00 75 18 8A 72 0D 74 53 65 6F 20 53 42 73 F0 00 20 BC 22 00 7C 13 B8 01 94 5E D7 AC 07 33 8B E1 5B 9F 91 E8 09 0A 6F 20 6C 6E 0D 44 4F 57 09 29 46 FC 05 7C 04 56 20 46 00 74 2B 98 00 C0 7D 03 72 EA F7 D0 40 44 20 20 20 65 0A 4F 4F 29-49 00-12 5D-3B 41-54 7B-16 89-7E C6-45 CD-13 1E-03 00-8B FC-11 72-47 4A-4E C9-B8 03-F0 CD-10 CD-16 0F-83 46-FC C8-81 00-02 76-18 CC-D0 75-01 69-73 20-20 20-20 64-69 20-75 00-49 53-20 54-20 48 00 DD 31 07 00 FE 72 46 76 4E 38 74 D8 AC EB 5E FF 13 3F 70 42 CC 42 63 FF 20 73 6E 4F 20 53 43 02 10 32 BD 89 0F 3C 0E 11 FE 2D 0B 7D 84 EE 1F 02 56 4D 00 87 0A 03 6F 0D FF 63 61 20 20 59 00 00 4E 20 78 4E 8B 8A 13 F7 5A 74 03 87 C0 BE 8F 72 FE 5A 50 CA CC 5E 20 0A 0D 6F 20 20 53 53 02 00 4F 20 00 02 46 46 D1 E6 58 19 F9 46 74 83 04 C8 BB 75 52 F7 B8 0B 69 45 0A 20 74 20 59 00 01 00 20 20 C5 B1 18 10 50 8B BB B1 83 3E 17 7D 8F 8B 00 A7 51 76 01 E2 6E 72 43 79 65 20 53 00 01 00 4E F1 76 0B 88 98 52 5E 00 0B C7 3C 3C EB 44 C7 07 81 91 1A 02 CC 63 72 61 20 63 20 80 55 00 00 41 7D 00 FC 45 F7 89 0B 07 56 15 D8 FF E5 02 48 53 BF 92 8A CD C3 6F 6F 6D 70 6C 20 01 AA .>.+ysW)IHC..... ...@............ ......)];..NO NA ME FAT12 .} .3.....{...x..v. .V.U."..~..N.... ......|.E...F..E ..8f$|...r<.F... f..F..V..F...PR. F..V.. ..v....^. ..H...F..N.ZX... .......rG8-t...V .v>..^tJNt...... ;.r...+...}.F><. u...}.......t.<. t............}.. ..}..3...^....D. ....}.}....r...H H.N....F..V....S .....[r..?MZu... ..BJu....p.PRQ.. 3..v...v.B...v.. ..V$............ .YZXr.@u.B.^.... ...'..Disco inco rrecto ...Erro r E/S ...Cam bie el disco y p resione una tecl a ...IO SYSMSDOS SYS.. .WINBOOT SYS..U.

5.5 La opcin R("Register") sirve para comprobar y modificar el contenido de los registros; se ha comentado en el apartado dedicado a la arquitectura del procesador

S-ar putea să vă placă și