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: