Boot, BIOS, Bootloader POST da BIOS

Propaganda
20/11/2014
Boot, BIOS, Bootloader
Prof. Alexandre Beletti
POST da BIOS
• O primeiro a ser executado é o POST
• Verifica presença de dispositivos (Ex: teclado,
monitor, etc)
• Verifica se a memória RAM está OK (teste
básico)
• O POST carrega o software da BIOS no final da
memória RAM (Ex: 0xFFFFF0)
1
20/11/2014
POST da BIOS
•
•
•
•
•
•
Coloca um JMP no primeiro byte na memória.
CS:IP é setado em 0
O processador executará o endereço 0x00000
Esse endereço está com um salto:
JMP 0xFFFFF0
A BIOS assume o controle....
BIOS
• O que a BIOS faz?
• Carrega o vetor de interrupções na RAM (IVT)
• Faz uso da INT 0x19 para localizar um
dispositivo “bootável”
• Procura pelo SETOR 1, HEAD 0, TRACK 0
• Um setor tem 512 bytes somente
• Esse 512 bytes são carregados a partir do
endereço 0x7C00 (o Bootloader!)
2
20/11/2014
Bootloader
•
•
•
•
Está armazenado na MBR
É sempre o primeiro setor de um disco
Tem o tamanho máximo de 512 bytes
É carregado na BIOS pela INT 0x19 no
endereço 0x7C00
Exemplo de um Boot Loader
org
bits
0x7c00
; We are loaded by BIOS at 0x7C00
16
; We are still in 16 bit Real Mode
cli
hlt
; Clear all Interrupts
; halt the system
Start:
times 510 - ($-$$) db 0
; We have to be 512 bytes.
;Clear the rest of the bytes with 0
dw 0xAA55
; Boot Signiture
3
20/11/2014
Montando e Gravando
• Montando o código em ASM:
nasm –f bin boot1.asm –o boot1.bin
• Gravando em um disquete:
partcopy 0 200 –f0
• 0 = endereço inicial
• 200 = endereço final (0x200 = 512 decimal)
• -f0 = disquete 0 ou A: ou /dev/fd0
Bootloader no BOCS
4
20/11/2014
Modos do Processador
Prof. Alexandre Beletti
Modos do Processador x86 - PC
•
•
•
•
Real Mode
Protected Mode
Unreal Mode
Virtual 8086 Mode
5
20/11/2014
Modo Real
•
•
•
•
Endereços SEGMENTO:OFFSET
Limitado a 1Mb de memória
Registradores de 16 bits
Sem Memória Virtual ou Memória Protegida
Modo Real - Endereçamento
• Você deseja acessar mais do que 64Kbytes
que um endereço de 16 bits permite (de 0 até
65535 ou de 0x0000 até 0xFFFF)
• Quando temos mais de 64Kb precisamos
dividir a memória em partes (SEGMENTOS)
• Lembre-se dos registradores de segmento do
x86 de 16 bits (CS, DS, SS e ES)
6
20/11/2014
Modo Real - Endereçamento
• Temos então o Endereço Real que é:
• (SEGMENTO x 16d) + OFFSET
• Ex: No endereço 07C0:0000, o primeira parte
(07C0) é o segmento e a segunda parte (0000)
é o offset
• Podemos representar um mesma referência a
memória com combinações de SEGMENTOS e
OFFSET distintos
Modo Real - Endereçamento
•
•
•
•
•
•
•
•
•
•
•
•
0007:7B90
0008:7B80
0009:7B70
000A:7B60
000B:7B50
000C:7B40
0047:7790
0048:7780
0049:7770
004A:7760
004B:7750
004C:7740
Endereço: 0x7C00
Os endereços ao lado
representam todos a
mesma coisa!
7
20/11/2014
Overlapped Segments
• O fato de você ter possibilidades distintas de
referenciar um único byte na RAM pode gerar
o que chamamos de “Overlapped Segments”
Modo Protegido
•
•
•
•
Faz uso de “Descriptor Tables”
Permite o uso de processadores em 32 bits
Permite endereçar mais de 4Gb de RAM
A maioria dos Sistemas Operacionais faz uso
de Modo Protegido
8
20/11/2014
Modo Unreal
• É o modo real mas com 4Gb
• Mudamos o processador para o Modo
Protegido
• Carregamos um “Descriptor”
• Voltamos para o Modo Real
Modo Virtual 8086
• É um Modo Protegido com um Modo Real de
16 bits emulado
• Lembre-se: As Interrupções da BIOS são
disponíveis somente no Modo Real!
9
20/11/2014
OEM Parameter Block
BIOS Parameter Block
Prof. Alexandre Beletti
OEM Parameter Block
• O propósito desse bloco é descrever o sistema
de arquivos presente no disco
• Por exemplo, caso isso não exista o Windows
irá exibir que o Disco Não Está Formatado
• Ele deve estar incluída no programa que será
o nosso Bootloader (ou no primeiro estágio do
Bootloader no caso de Bootloader com dois
estágios)
10
20/11/2014
Exemplo de OEM Parameter Block
Organização do Disco – FAT12
Boot
Sector
Extra
Reserved
Sectors
File
Allocation
Table 1
File
Allocation
Table 2
Root
Directory
(FAT12/FAT16
Only)
Data Region
containng
files and
directories.
11
20/11/2014
Características da FAT12
• Possui duas FATs (a segunda é uma cópia da
primeira)
• Os setores extras reservados são
determinados pelo OEM Block na
bpbReservedSectors
• O diretório ROOT (raiz) é uma tabela de
formada por registros de 32 bytes
Registro da Tabela FAT12 – 1 de 2
• Bytes 0-7 : DOS File name (Padded with spaces)Bytes 8-10
: DOS File extension (Padded with spaces)Bytes 11 : File
attributes. This is a bit pattern:Bit 0 : Read Only
• Bit 1 : Hidden
• Bit 2 : System
• Bit 3 : Volume Label
• Bit 4 : This is a subdirectory
• Bit 5 : Archive
• Bit 6 : Device (Internal use)
• Bit 6 : Unused
• Bytes 12 : UnusedBytes 13 : Create time in msBytes 14-15
: Created time, using the following format:Bit 0-4 : Seconds
(0-29)
• Bit 5-10 : Minutes (0-59)
12
20/11/2014
Registro da Tabela FAT12 – 2 de 2
• Bit 11-15 : Hours (0-23)
• Bytes 16-17 : Created year in the following format:Bit 0-4
: Year (0=1980; 127=2107
• Bit 5-8 : Month (1=January; 12=December)
• Bit 9-15 : Hours (0-23)
• Bytes 18-19 : Last access date (Uses same format as above)
• Bytes 20-21 : EA Index (Used in OS/2 and NT, dont worry
about it)
• Bytes 22-23 : Last Modified time (See byte 14-15 for
format)
• Bytes 24-25 : Last modified date (See bytes 16-17 for
format)
• Bytes 26-27 : First Cluster
• Bytes 28-32 : File Size
Procurando e Lendo na FAT12
Prof. Alexandre Beletti
13
20/11/2014
Procurando e Lendo na FAT12
1. Carregando a Tabela do Diretório Root
2. Encontrando o Estágio 2 do Bootloader (Ex)
3. Carregando a FAT
Carregando a Tabela do Diretório Root
• Calcule o Tamanho do Diretório Root = Divida
o número de “Entradas do Root” pelo
“Número de Bytes por Setor”
• Calcule o Endereço do Root = “Número de
FATs” somado com o “Setores Reservados”
14
20/11/2014
Encontrando o Estágio 2 do
Bootloader (Por Exemplo...)
• Os 11 primeiros bytes das entradas de 32
bytes do diretório ROOT são o nome do
arquivo
• Basta verificar se o nome encontrado é o
desejado, caso contrário incremente 32 bytes
(tamanho do registro)
• Repita o procedimento anterior até encontrar
ou dizer que o arquivo não existe
Carregando a FAT
• Quando encontramos o arquivo precisamos
dos últimos 2 campos do registro:
• Bytes 26-27 : First Cluster
• Bytes 28-32 : File Size
• Agora em “First Cluster” temos o endereço do
primeiro cluster do arquivo
15
Download