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