Download Transparencias 6 1305
Document related concepts
no text concepts found
Transcript
Arquitectura de PCs El ambiente de desarrollo Introducción Ambiente de desarrollo del curso: Hardware PC AT+ - CPU Intel 80386+ - Teclado - Monitor color - Disco duro - Disquetera Software libre Open Source - Sistema operativo FreeDOS - Linker VAL - Compilador NASM Temática para laboratorio 1: Sistema operativo DOS Formato de archivo ejecutable COM Compilador NASM DOS y .COM: Introducción Notación: SO = “sistema operativo” Para el usuario y el programador el SO FreeDOS es idéntico al SO MS-DOS de Microsoft: se usa indistintamente términos “DOS” y “FreeDOS” DOS y .COM: Introducción Fin POST del BIOS: Carga sector CHS=0,0,1 de dispositivo primario en 0000:7C00H Salto incondicional 0000:7C00H Si dispositivo de arranque es un disquete, sector CHS = 0,0,1 contiene el “sector de inicio” El sector de inicio se escribe en la instalación del SO El sector de inicio es un programa que usa servicios BIOS para cargar al SO a memoria DOS y .COM: Introducción FFFFFH ROM BIOS F0000H EFFFFH ROM (dispositivos y opcional) C0000H BFFFFH RAM de vídeo A0000H Memoria disponible para programas de usuario COMMAND.COM SO DOS Datos del BIOS 00400H 003FFH 00000H Tabla de interrupciones El proceso de inicio del SO termina en ejecución de procesador de comandos COMMAND.COM DOS y .COM: Introducción Arquitectura DOS: tres capas COMMAND.COM PROGRAMAS DE USUARIO INT 21H, 27H Núcleo DOS Funciones del sistema para: - Manejo de archivos, de memoria - Acceso a teclado y video - Acceso a RTC - Ejecución de programas INT 5, 13H .. 1AH, 48H BIOS Servicios BIOS de acceso a dispositivos DOS y .COM: COMMAND.COM COMMAND.COM imprime línea de comandos en pantalla, interpreta y ejecuta comandos de usuarios: Comando interno: reside en COMMAND.COM copy, dir, del Comando externo: programa en disco; se carga en memoria al inicio de ejecución y se descarta al terminar ejecución Programas de usuario, editores de texto, etc. Archivo batch: archivo de texto de extensión BAT. Incluye comandos externos e internos. Se procesa una línea por vez DOS y .COM: COMMAND.COM Ejecución COMMAND.COM: Loop_infinito: mov ah, 09h COMMAND.COM C:\> HOLA mov dx,prompt int 21 h mov dx, cmd mov ah, 0Ah Núcleo DOS ... int 10h ... ... int 16h ... BIOS int 21 h call parse_cmd ... jmp Loop_infinito ... prompt db ‘C:\>$’ cmd resb 256 HOLA [Enter] DOS y .COM: COMMAND.COM Interpretación de comando (por ej. HOLA): Si es interno lo ejecuta y termina Si no, busca comando externo o archivo batch con el mismo nombre que el comando: En directorio actual y en cada directorio de variable PATH Primero busca archivo de extensión “.COM”, luego “.EXE” y luego “.BAT” Si no se encuentra archivo, muestra mensaje “Bad command or file name” DOS y .COM: COMMAND.COM Ejecución de comando externo “HOLA” FFFFFH Parse_cmd: COMMAND.COM call internal_cmd jnz external ret 0911DH mov ah,4Ch external: Núcleo DOS SP 18FFEH call find_cmdfile jnz print_nocmd mov dx,cmdfile ... mov ah,4Bh int 21h 09100H 09000H PSP ;EXEC INI_MEM 09000H Cmdfile resb 256 cmd resb 256 PATH DS CS SS C:\HOLA.COM 01000H resb 512 B4 09 BA 0C 01 CD 21 B8 00 4C CD 21 42 75 65 6E 20 64 69 61 20 6D 75 6E Environment: C:\;C:\bin Memoria disponible DOS ret HOLA 24 21 09 B4 int 21h C:\HOLA.COM Disco 00000H 64 6F 21 21 21 24 DOS y .COM: Núcleo del SO Núcleo DOS implementa funciones de soporte a interfaz a aplicaciones: servicios DOS (detalle en bibliografía [1] del curso): Manejo de archivos Abstrae disco en sistema jerárquico de archivos organizado como árbol de directorios (funciones abrir, leer, escribir, crear, eliminar archivo, etc.) Manejo de memoria Reserva o libera memoria en zona disponible Acceso a teclado y video Ejecución y terminación de programas Incluye soporte a programas residentes Acceso a RTC Lectura escritura de fecha y hora Acceso a servicios DOS Interrupción paraguas 21H; función individual en AH Interrupciones (de software) DOS DOS y .COM: Núcleo del SO Programas residentes juegan papel importante en este curso: Programa no residente: memoria se libera al terminar Programa residente: mantiene parte especificada del programa en memoria tras terminar DOS y .COM: Núcleo del SO Ejemplo: dos programas no residentes FFFFFH C:\> P1.COM C:\> P2.COM P2 P1 09100H 09000H PSP(P2) PSP(P2) PSP(P1) DOS INI_MEM 09000H 01000H 00000H Memoria disponible DOS y .COM: Núcleo del SO Ejemplo: programa 1 con 300H bytes residentes FFFFFH C:\> P1.COM P2 09400H 09300H PSP(P2) PSP(P2) P1 09100H 09000H PSP(P1) DOS 01000H 00000H INI_MEM 09000H 09300H Memoria disponible C:\> P2.COM DOS y .COM: Programa COM Los archivos EXE y COM se ejecutan directamente por la CPU El tipo COM es el más simple de los dos, y el que se va a utilizar en este curso Un archivo COM se corresponde directamente con la imagen binaria del programa en memoria DOS y .COM: Programa COM Se considera programa HOLA.ASM: section .text Directiva: espacio de instrucciones y datos único org 100h Directiva: primera instrucción en offset 100H, siguiendo PSP mov ah,9 mov dx,HI int 21h Función 9 DOS: imprime cadena de texto terminada en ‘$’ Recibe puntero a la cadena en DS:DX (DS = CS) Pasa Control a DOS mov ax,4C00h int 21h Función 4CH DOS: termina programa Pasa Control a DOS HI db ‘Buen dia mundo!!!$’ Cadena de texto en dirección “HI” B4 09 BA 0C 01 CD 21 B8 Se ensambla en HOLA.COM 00 4C CD 21 42 75 65 6E 20 64 69 61 20 6D 75 6E 64 6F 21 21 21 24 DOS y .COM: Programa COM Ejecución de comando externo “HOLA.COM” FFFFFH mov COMMAND.COM dx,cmdfile ... mov ah,4Bh ;EXEC int 21h SP 18FFEH 0911FH mov ah,4Ch ... int 21h Núcleo DOS Disco 24 21 09100H 09 B4 09000H PSP Memoria disponible DS CS SS DOS C:\HOLA.COM INI_MEM 09000H C:\HOLA.COM HOLA Cmdfile resb 256 cmd resb 256 01000H PATH resb 512 00 4C CD 21 42 75 65 6E 20 64 69 61 20 6D 75 6E Environment: C:\;C:\bin B4 09 BA 0C 01 CD 21 B8 00000H 64 6F 21 21 21 24 DOS y .COM: Programa COM HOLA.ASM: section .text Directiva: espacio de instrucciones y datos único org 100h Directiva: primera instrucción en offset 100H, siguiendo PSP mov ah,9 mov dx,HI int 21h Función 9 DOS: imprime cadena de texto terminada en ‘$’ Recibe puntero a la cadena en DS:DX (DS = CS) Pasa Control a DOS mov ax,4C00h int 21h Función 4CH DOS: termina programa Pasa Control a DOS HI db ‘Buen dia mundo!!!$’ Cadena de texto en dirección “HI” - HOLA.ASM no hace referencia directa a ningún registro de segmento - Por ej., puntero a cadena de texto que imprime la función 9 DOS (HI) se pasa como offset relativo a DS - HOLA.ASM es independiente de la dirección donde lo carga DOS DOS y .COM: Programa COM PSP Previo a la ejecución del programa, DOS: carga archivo COM a offset 100H del segmento de programa Crea un PSP (Program Segment Prefix), desde offset 0 hasta offset 0FFH del segmento Gran parte de PSP no se usa en programas de DOS, aunque se preserva por compatibilidad hacia atrás Partes del PSP útiles: Offset 80H: texto que sigue al nombre del programa en la línea de comandos Offset 2CH: segmento que contiene las variables de entorno DOS (por ej. PATH) DOS y .COM: Programa COM Por ej., se invoca HOLA según C:\HOLA Hola mundo! Para imprimir en pantalla el contenido de la PSP: DEBUG c:\HOLA.COM Hola Mundo! - D 0 L 100 En particular, en offset 80H se observa el valor 0CH, que es el largo de “Hola Mundo!”, seguido de la cadena de texto terminada en <CR>=0DH Comando DEBUG “R” imprime valor de los registros DOS y .COM: Programa COM Inicio de la pila: después de cargar el programa en offset 100H, DOS inicia la pila en el tope del segmento: Los dos primeros bytes se inician a 0, para que una instrucción RET salte a offset 0 de la PSP, donde reside instrucción INT20H (devuelve control a DOS) Inicia SP = FFFEH DOS y .COM: Ej. virus COM Virus de computadora: programa que se reproduce a sí mismo NO crea copias de sí mismo (1.COM -> 2.COM); se adjunta a otros programas “infectándolos” Programas infectados se ejecutan en uso normal de la computadora, y virus se ejecuta con ellos DOS y .COM: Ej. virus COM Se considera por ej. el tipo de virus más sencillo: MINI-44.ASM, que infecta archivos .COM reemplazando parte del programa con su propio código MINI-44 ensambla en 44 bytes: B4 4E BA 26 01 CD 21 72 1C B8 01 3D BA 9E 00 CD 21 93 B4 40 B1 2C BA 00 01 CD 21 B4 3E CD 21 B4 4F CD 21 EB E2 C3 2A 2E 43 4F 4D 00 Un programa infectado por MINI-44 se destruye DOS y .COM: Ej. virus COM Todo virus tiene dos rutinas básicas: rutina de búsqueda: localiza archivos para infectar rutina de copia: copia el virus a programa localizado DOS y .COM: Ej. virus COM FFFFFH Ejecución MINI-44: 24 21 09100H 4E B4 09000H PSP ¿ Archivo Encontrado? MEM 9000H No C:\ Retornar a DOS PRUEBA Si : VICTIMA.COM INFECTADO.COM Infecta archivo DOS 01000H C:\PRUEBA> Busca primer archivo COM en C:\PRUEBA 18FFFH 0911FH C:\PRUEBA> INFECTADO B4 4E BA 26 01 CD 21 72 1C B8 01 3D BA 9E 00 CD Busca siguiente archivo COM en C:\PRUEBA 21 93 B4 40 B1 2C BA 00 01 CD 21 B4 3E CD 21 B4 4F CD 21 EB E2 C3 2A 2E 43 4F 4D 00 B4 09 21 21 00000H 24 VICTIMA.COM B4 4E 09 BA 26 0C 01 CD 21 72 B8 00 B8 1C 4C 01 CD 3D 21 BA 42 9E 75 00 65 CD 6E 20 93 21 64 B4 69 40 61 B1 20 2C 6D BA 75 00 6E 64 CD 01 6F 21 B4 21 3E 21 CD 24 21 B4 B4 09 BA CD 4F 0C 21 01 EB CD E2 21 C3 B8 2A 00 2E 4C CD 4F 43 21 4D 42 00 75 65 6E 20 64 69 61 20 6D 75 6E 64 6F 21 21 21 24 DOS y .COM: Ej. virus COM - DOS organiza disco como sistema de archivos jerárquico desde directorio “raíz” - Estructura de árbol: directorios pueden contener subdirectorios - Rutina de búsqueda de MINI-44 usa funciones DOS (int 21h) 4EH y 4FH Función DOS 4EH Buscar primero: busca primer archivo según cadena de texto, por ej., “DB *.COM”) DS:DX apunta a la cadena de texto especificando búsqueda Si CY = 0 nombre y atributos de archivo en sección DTA de PSP; si CY = 1 no encontró Función DOS 4FH Buscar siguiente: busca siguiente archivo a partir de una secuencia definida por función Buscar Primero DTA iniciado en llamado previo a función Buscar Primero o Buscar Siguiente Si CY = 0 encontró, nombre y atributos de archivo en sección DTA de PSP; si CY = 1 no encontró DOS y .COM: Ej. virus COM Análisis de código de MINI-44: SRCH_FIRST: Busca primer archivo COM en C:\PRUEBA mov dx,COMFILE COMFILE = Offset de cadena ASCII mov ah,4EH Función Buscar Primero int 21H Pasa a DOS COMFILE db '*.COM',0 jc DONE no encontró ¿ Archivo Encontrado? No Si Infecta archivo Busca siguiente archivo COM en C:\PRUEBA mov ah,4FH Buscar int 21H siguiente Buscar archivo COM en directorio de virus Retornar a DOS DONE: ret termina devolviendo control a DOS Abre archivo FOUND: mov ax,3D01H Abrir archivo (AH=3DH), en modo escritura (AL=1) mov dx,FNAME nombre de archivo encontrado en offset FNAME=9EH int 21h devuelve manejador de archivo en AX Escribe mov bx,ax carga manejador de archivo en BX mov dx,100H inicio del buffer de escritura mov cx,44 número de bytes a escribir mov ah,40H función 40H escribe cx bytes a archivo definido int 21h Cierra archivo por el manejador en BX; buffer DS:DX mov ah,3EH función 3EH, cierra archivo definido por int 21h manejador en BX Ambiente de desarrollo EL COMPILADOR NASM Y EL FORMATO COM Definiciones Archivo fuente: archivo de entrada a un ensamblador. Consiste en sentencias ASM y directivas al ensamblador Archivo objeto: archivo producido por un ensamblador procesando un archivo fuente. Existen diversos formatos. En general archivo objeto consiste en: Encabezado Código de máquina Información de relocación Símbolos del programa Definiciones El enlazador (linker) genera un “archivo ejecutable”, “enlazando” un conjunto de archivos objeto Existen diversos archivos de formato ejecutable. El más simple es el formato COM, que tiene sólo el código máquina del programa Ensamblado NASM NASM puede generar 2 formatos de archivos objeto: OBJ o BIN Generación ejecutable COM con NASM a partir de varios fuentes: formato OBJ Archivo Fuente 1 NASM Archivo Objeto 1 Formato OBJ Archivo Fuente 2 NASM Archivo Objeto 2 Formato OBJ Archivo Fuente N NASM Archivo Objeto N Formato OBJ ENLAZADOR Archivo Ejecutable COM Si el archivo fuente es autocontenido (LABORATORIO 1), NASM permite generar directamente ejecutable (formato BIN) Formato BIN Archivo Fuente NASM Archivo Ejecutable COM Comando NASM Comando NASM para ensamblar archivo: nasm -f <formato> <ArchivoFuente> [-o ArchivoObjeto>] [-l ArchivoListado] Opcionales - Formato = formato de objeto, “bin” u “obj” Archivo fuente = path a archivo fuente con extensión “.ASM” Archivo objeto = path a archivo objeto (extensión .BIN, .COM o .OBJ) Archivo listado = path a archivo de listado con extensión “.LST” Archivo objeto tipo BIN se compone sólo del código de máquina del archivo fuente: idéntico a formato COM Fuente: hola.asm nasm -f bin hola.asm -o hola.com -l hola.lst Objeto: hola.com Listado: hola.lst Fuente BIN Esqueleto de archivo fuente NASM para el formato BIN: Sección: conjunto de datos en localidades adyacentes de memoria section .text org 100h Estrictamente, para BIN el offset es ORG + el comienzo de la sección relativo al inicio del binario ;Directiva a NASM, indicando ;que las sentencias que siguen ;pertenecen a la sección “text” ;Directiva a NASM, indicando ;offset que se suma a ;todas las referencias a ;memoria en las instrucciones .......... [sentencias ASM en sintaxis según CAP. 2] .......... NASM: Ensamblado BIN Se considera por ej. HOLA.ASM: section .text org 100h mov ah,9 mov dx,HI int 21h mov ax,4C00h int 21h HI db ‘Buen dia mundo!!!$’ Comando para generar listado de HOLA.ASM: nasm -f bin hola.asm -o hola.com -l hola.lst NASM: Ensamblado BIN Hola.lst: Referencia a la memoria: offset 000C de sección TEXT (todavía no sumó el offset de ORG) Número de línea en archivo fuente Línea de archivo fuente Offset en archivo objeto Instrucción en código de máquina Se ensambla en NASM: Ensamblado BIN NASM suma 100H (ORG) a la referencia en la línea 5; esto se verifica en el archivo objeto de salida, por ej. con el comando DEBUG: “debug [nombre de archivo].COM” carga el archivo COM en memoria igual que función EXEC, sin pasar el control de ejecución al archivo Instrucción “D 100 L 20” muestra 20H bytes desde offset 100H de archivo cargado por DEBUG, esto es, primeros 20H bytes de archivo COM NASM: Ensamblado BIN Debug aplicado a hola.com: mov ah,9 mov dx, HI HI = 010CH (LITTLE ENDIAN) NASM: Ensamblado BIN “U 100 L B” desensambla 0BH bytes de código del archivo COM: