Moving Grave3:(MG#_3.X02):21/11/1995 << Back To Moving Grave3


Unas palabras antes... ---------------------- Bueno gente heme aqui nuevamente, escribiendo para uds., la cosa es que mu- chos de uds. habran sentido nombrar que algunos virus pueden infectar los .SYS, bueno, muchos de uds. no sabran ni como funciona los .SYS (diriamos, como los - ejecuta el D.O.S). El texto que veran aqui, mas que nada lo saque de un par de file, que estan perdido por uno de los CD que poseo, asi que me dedique a traducirlo, y a agre- garle algunas cositas, o comentarios. La informacion, sera entregada a uds. en forma pausada, quiere decir que en aproximadamente 2 o 3 ediciones mas terminaremos el tema...ok? Nose desanimen, supongo que esta parte de la info, por esta edicion estara bien. Bueno, espero que este texto les sea de mucha utilidad, asi podre ver (es- pero que asi sea) muchos virus argentinos que puedan infectar a los .SYS, bue' dejando el boludeo, aqui voy... =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= INSTALLABLE DEVICE DRIVERS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= CONTENIDO DE ESTA EDICION ------------------------- El formato del DEVICE DRIVER Tipo de DEVICES Devices Caracter Devices Bloque Device Header (encabezamiento de los DEVICE DRIVERS) Puntero hacia el proximo campo del Device Header Atributos del campo Bits 0 and 1 Bit 2 Bit 3 Bit 13 Bit 14 Bit 15 Puntero hacia la estrategia y las rutinas de interrupcion Campo de Nombre/Unidad Creando un Device Driver EL FORMATO DEL DEVICE DRIVER├───────────────────────────────────────────────── Un device driver es un controlador de comunicacion entre el Sistema de Soft y el hardware patron (patron=Device). El ROM de un motherBoard y los archivos - IBMIO.COM o IO.SYS contienen los controladores basicos que tienen el cuenta al DOS para que pueda mantener una relacion con la consola, controladores de dis- cos, con el puerto serial y paralelo, el CLOCK (reloj), y con otros recursos. DOS posee cinco controladores (drivers) ya creados, STDIN, STDOUT, STERR, STDPRN, o STDAUX. Un controlador "instalable", puede ser leido en el archivo CONFIG.SYS, y pudiendo reemplazar uno de los que ya estan creados, o sencilla- mente definir un nuevo recurso, como podria ser un MOUSE o el CONTROLADOR DE MEMORIA EXPANDIDA. El DEVICE DRIVER es un archivo COM (imagen de memoria) que contiene todos los codigos necesarios para controlar o insertar un DEVICE. Un archivo EXE no lo usa desde el EXE LOADER en algunas versiones 2.x del DOS esta parte del - COMMAND.COM, el cual no se encuentra presente porque el DEVICE DRIVER puede ser leido por el IBMBIO.COM o el IO.SYS. El formato de controladores EXE puede ser usado en el DOS 3.x+, pero esto no es generalmente una razon para usarlo. Los archivos COM no pueden ser leidos con el usual ORG 100h. Puesto que el controla- dor no usa el PSP (Program Segment Prefix), este es simplemente leido fuera del desplazamiento (offset), por esto el archivo controlador (DRIVER) tiene que te- ner su origen en 0. Muchas referencias advierten "ORG 0 o sin ORG declarado", sin embargo con el advenimiento de los nuevos assemblers en el mercado, algunos de los cuales hacen archivos .COM por defecto, especificamente empezando "ORG 0" para eliminar problemas. Los Arhcivos controladores no poseen declarado el seg- mento de la pila (STACK SEGMENT). DOS puede instalar los DEVICE DRIVER en cualquier lugar de la memoria, tal atencion esta obligada a tomar adentro una referencia de memoria lejana (FAR MEMORY). Uds. no puede esperar que su DRIVER pueda ser leido en cualquier lugar siempre. TIPOS DE DEVICES├────────────────────────────────────────────────────────────── Existen dos tipos de Patrones (DEVICES): Caracter Patron y el Bloque Patron. Los atributos que poseen son como los siguientes: CARACTER PATRONES (CHARACTER DEVICES) son designados para el I/O serial en una manera de Byte por Byte. Estos patrones poseen nombre como CON, AUX, o PRN, y uds. puede abrir canales (HANDLES o FBCs) para muchas I/O como si fuera un ar- chivo de disco. I/O puede estar de dos formas, cosinado o en crudo (que es esto?, una receta de cocina?!?!?!?!) [ver referencias al final de todo]. Por esto el caracter patron puede tener solamente un nombre, este puede soportar solamente un patron (device). BLOQUE PATRONES (BLOCK DEVICES) son normalmente implementados como DISCOS. Estos pueden tener un I/O aleatorio en fragmentos llamados BLOQUES, los cuales son usualmente el tamaño del sector fisico del disco.Estos patrones (devices) no poseen nombre como los "character devices", y no pueden abrirse directamente. En lugar de estos son accedidos usando letras de disco como las siguientes A, B, C, etc. El bloque patron puede tener unidades con el. En esta forma, un bloque controlador simple puede ser reponsable de uno o mas discos (HD & FD). Por ej: el primer bloque controlador de discos puede ser responsable de los discos A, B, C, y D. Este medio posee cuatro unidades definidas y por esto puede tomar cuatro letras de discos. La posicion de los discos en la la cadena de todos los discos determina el modo en como las letras de los discos corresponden, ejemplo, si un segundo bloque controlador de discos define tres unidades, entonces estas uni- dades seran E, F, y G. DOS 1.x contiene 16 bloques patrones. DOS 2.x contiene 63, y DOS 3.x posee 26. Es recomendado que el limite de discos este en los 26 patrones (devices) para compatibilizarce con DOS 3.x and 4.x. Con DOS 2.x pasa la Z: como espera de dis- co, la espera de disco toma una pequeña cuerda (?!?!?), como esta ^, [, o #. DOS 3.x+ puede retornar un mensaje de error. ESTRUCTURA DE UN DEVICE DRIVER├──────────────────────────────────────────────── Un controlador patron consiste en tres grandes partes: un encabezamiento (DEVICE HEADER) una rutina de estrategia (STRATEGY ROUTINE) una rutina de interrupcion (INTERRUPT ROUTINE) Emcabezamiento (DEVICE HEADER) El controlados posee un HEADER especial que lo identifica como DEVICE y defi- ne los punteros de entrada hacia la estrategia y la interrupcion y posee varios atributos. Este HEADER esta localizado en el comienzo del archivo, Este contiene el puntero hacia el proximo controlador, en la cadena, los atributos de los DE- VICES, desplazamiento en la estrategia y rutinas de interrupcion, y el identifi- cador del patron (DEVICE). Este es el formato del encabezamiento (DEVICE HEADER): ┌─────────────────────────────────────────────────────────────────────────────┐ │ D E V I C E H E A D E R │ ├───────┬────────┬────────────────────────────────────────────────────────────┤ │Offset │ Long. │ Descripcion │ ├───────┼────────┼────────────────────────────────────────────────────────────┤ │ 00h │ word │ Puntero al proximo campo del header, valor del offset │ ├───────┼────────┼────────────────────────────────────────────────────────────┤ │ 02h │ word │ Puntero al proximo campo del header, valor del segmento │ ├───────┼────────┼────────────────────────────────────────────────────────────┤ │ 04h │ word │ Atributo │ ├───────┼────────┼────────────────────────────────────────────────────────────┤ │ 06h │ word │ Puntero hacia la rutina de estrategia (solamente el offset)│ ├───────┼────────┼────────────────────────────────────────────────────────────┤ │ 08h │ word │ Puntero a la rutina de interrupciones (solamente el offset)│ ├───────┼────────┼────────────────────────────────────────────────────────────┤ │ 0Ah │8 bytes │ Nombre/Unidad Campo │ └───────┴────────┴────────────────────────────────────────────────────────────┘ CREANDO UN DEVICE DRIVER├────────────────────────────────────────────────────── Para crear un DEVICE DRIVER para que DOS pueda instalarlo, uds. necesita lo si- guiente: 1) Crear una imagen de memoria (archivo .COM) con un DEVICE HEADER en el comien- zo del archivo. 2) Originar el codigo (incluido el device header) en 0, en lugar de 100h. 3) Setear el proximo campo del device header. Para mas referencias leer "Puntero hacia el proximo Device Header, campo de atributos". 4) Setear el campo del atributo hacia el device header. Para mas referencias leer "Campo de Atributos" 5) Setear el Entry Point (puntero de entrada) de las rutinas de interrupcion y la de estrategia. 6) rellenar en el campo "nombre/unidad" con el nombre del caracter patron o el numero de unidad del bloque patron. DOS siempre procesa la instalacion de Caracter DEVICE DRIVER despues de colo- car el DEVICE por defecto. Asi para instalar un nuevo CON device, nombre simple del device CON. Seguro para setear los bits del "standard input device" y el "standard output device" en el campo de atributos de un nuevo de un nuevo CON - DEVICE. El examinador de la lista de device se detiene en el primer conjunto asi el instalador de device driver toma procedencia. Por instancias, intalando el ANSI.SYS remplaza el controlador CON ya creado. DOS no presta atencion sobre la posicion del instalado del caracter devices, versus bloque device. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Referencias: ------------ ARCHVO I/O EN MODO BINARIO (RAW) ├──────────────────────────────────────────── Las siguientes son "verdades" que se producen cuando un archivo es leido en modo binario: 1) Los caracteres ^S (scroll lock), ^P (print screen), ^C (Control Break) no son chequeados durante su lectura. Por eso no repite la impresion si ^S o ^P son leidos (Printer Echo). 2) Esto no es un eco "echo" de STDOUT (0001h). 3) Leer el numero de byte especificado y retornar inmediatamente cuando el ulti- mo byte es recivido o se ha llegado al final del archivo. 4) No permite la edicion de la linea de entrada usando las teclas de funciones si la entrada se realiza desde STDIN (0000h). Las siguientes son "verdades" que se producen cuando un archivo es escrito en modo binario: 1) Los caracteres ^S (scroll lock), ^P (printer screen), ^C (control break) no son chequeados durante la escritura. Por eso no se ocurre el eco de impre- sion. 2) Por eso no es eco para STDOUT (0001h). 3) El numero exacto de bytes especificados son escritos. 4) No permite (^) caracteres de control. Por ejemplo, Ctrl-D es enviado como el byte 04h en lugar de dos bytes como ^ y D. 5) No expande los TABS en los espacios. ARCHIVO I/O EN MODO ASCII (COOKED) ├────────────────────────────────────────── Las siguientes son "verdades" que se producen cuando un archivo es leido en modo ASCII: 1) Se chequean los carateres ^C, ^S, y el ^P. 2) Retorna como varios caracteres como lo hacen en buffer entrada del device, o el numero de caracteres requeridos, cualquiera siendo menor. Si el numero de caracteres requeridos son menores que el numero de caracteres en el Buffer del device, entonces el proximo leido sera sumado a los caracteres restantes en el buffer. 3) Si no hay mas bytes restantes en el buffer de entrada del device, lee una li- nea (terminada por ^M) en el buffer. Esta line puede ser editada con las te- clas de funcion. El caracter retornado termina con una secuencia de 0Dh, 0Ah (^M,^J) si el numero de caracters requeridos es suficiente para incluirlos. Por ejemplo, si son necesarios 5 caracteres, y solo 3 son colocados despues del retorno del carro (0Dh o ^M) que fueron ingresados desde la consola DEVICE, estos 3 caracteres colocados y 0Dh y 0Ah son los retornados. Cualquiera, si son requeridos 5 caracteres y 7 son colocados despued del re- torno del carro, solo los primeros 5 son los retornados. La secuencia 0Dh,0Ah no es la retornada en este caso. Si es menor que el numero de caracteres re- queridos son colocados cuando el retorno de carro es recivido, el caracter recivido y 0Dh,0Ah son retornados. La razon por la que 0Ah (lineafeed o ^J) es sumada a los caracteres retornados es que el device fue creado para mirar- lo como un archivo de texto. 4) Si un 1Ah (^Z) es encontrado, la entrada concluida en esete punto. La secuen- cia (CR,LF) no es sumada a la cadena. 5) La repeticion esta ejecutada. 6) Las TABS son expandidas. Las siguientes son "verdades" que se producen cuando un archivo es escrito en modo ASCII: 1) Los caracteres ^S, ^P, y ^C son chequeados durante la operacion de escritura. 2) Los expancion de los TABS se limitan a 8 caracteres de espacio y dicho espa- cio se rellena con espacios (20h = 32d = Barra espaciadora * 8). 3) Toma los caracteres de control, por ejemplo, ^D es escrito como dos bytes, ^ y D. 4) Los bytes salen mientra que el numero especificado es sacado o una ^Z es en- con trado. El numero actual de salidas es retornada por el usuario. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Bueno gente si el texto que traduci lo escribi como un indio, solo tienen decirmelo asi para la proxima tratare de mejorar, ok?. Well, esto lo pensaba dejar para la utima entrega de este tema, pero como para no aburrirlos con demasiada teoria, aqui les va un pequeño programita, hecho en debug. ########################## PAUSE.SCR ########################## ---------------------------- CUT HERE ----------------------------------- A 0100 DB FF,FF,FF,FF ;******************************************************* DB FF,FF,FF,FF ; Por si no se dieron cuenta este es el famoso HEADER DW 8000,003A,0045 ; del manejador, que tanto habiamos hablado mas arriba!! DB "PAUSE",20,20,20 ;******************************************************* DB 0,0,0,0 DB 0D,0A,"Pulse cualquier tecla para continuar . . .",0D,0A,0 ;Aqui termina!! CS: ;Rutina de estrategia del manejador MOV WORD PTR [12],BX CS: MOV WORD PTR [14],ES RETF PUSHF ;Rutina de interrupcion del manejador PUSH AX PUSH SI PUSH DI PUSH DS PUSH BP PUSH CS ;Apunte DS hacia el segmento de codigo POP DS LES DI,[12] ;Apunte ES:DI hacia la peticion ES: CMP BYTE PTR [DI+2],0 ;Salga si el modo de comando no es 0 JNZ 016A CALL 0177 ES: MOV BYTE PTR [DI+0D],0 ;Conteo de unidad 0 para continuar ES: MOV WORD PTR [DI+0E],0 ;Direccion 0 de rutina para que el manejador ES: ;no se quede en memoria MOV WORD PTR [DI+10],CS ES: MOV WORD PTR [DI+3],100 POP BP ;Restaure los registros y salga POP DS POP DI POP SI POP AX POPF RETF MOV SI,16 ;Rutina de pausa CLD ;Limpia el indicador de direcciones LODSB ;Lea un caracter OR AL,A ;Salga si es un 0 JZ 0186 MOV AH,0E ;Muestro el caracter INT 10 JMP 017B ;Regreso a buscar mas MOV AH,0 ;Pausas hasta que se apriete una tecla INT 16 RET ;Regresar al modulo de llamada N PAUSE.SYS RCX 8B W Q ---------------------------- CUT HERE ----------------------------------- Forma de compilar: DEBUG < PAUSE.SCR [ENTER] (<-- No te olvides del enter eh?) Comentarios: ------------ Este programita lo que permite hacer es colocar una pausa en el config.sys, eso es lo unico!, igualmente, si no lo quieren compilar de nuevo les entrego el .SYS ya listo para ejecutarse!....8-D Si tuvieron algun problema al ejecutar solamente tienen que levantar el tubo y llamar para decirme que es lo que les ocurrio, ok?, lo mismo si te- nes alguna sugerencia sobre este tema, o los que tratamos anteriormente. HAVE FUN! ---/ Moving Grave 3 [MG#3] /--- ---/ COEAC Group. /--- -= Written by DΣ$ΓτΘ¥Στ From the HALLS OF THE DAMNED =-