Como sabemos, o registro mestre de inicialização (MBR) começa com 440 bytes de código de inicialização. Pelo que li, ele inicia o processo de inicialização e carrega o carregador de inicialização do sistema operacional.
Mas para um disco rígido externo, que é usado apenas para armazenamento de arquivos e não é inicializável, por que ainda há código de inicialização?
Tenho um SSD HP P900 de 1 TB com um MBR, uma partição ext4 e uma partição exFAT . Todas as partições são apenas para armazenamento de arquivos e, novamente, elas não são inicializáveis, mas por que nos bytes brutos do MBR, ainda há código de inicialização? Aqui estão os bytes brutos do MBR inteiro em hexadecimal:
fab800108ed0bc00b0b800008ed88ec0fbbe007cbf0006b90002f3a4ea21060000bebe073804750b83c61081fefe0775f3eb16b402b001bb007cb2808a74018b4c02cd13ea007c0000ebfe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069d0e83000000020210083fec2ff000800000060f62400fec2ff07fec2ff0068f62400684552000000000000000000000000000000000000000000000000000000000000000055aa
Este é o código de inicialização:
fab800108ed0bc00b0b800008ed88ec0fbbe007cbf0006b90002f3a4ea21060000bebe073804750b83c61081fefe0775f3eb16b402b001bb007cb2808a74018b4c02cd13ea007c0000ebfe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Este é o código de inicialização em formato de bytes:
11111010 10111000 00000000 00010000 10001110 11010000 10111100 00000000 10110000 10111000 00000000 00000000 10001110 11011000 10001110 11000000 11111011 10111110 00000000 01111100 10111111 00000000 00000110 10111001 00000000 00000010 11110011 10100100 11101010 00100001 00000110 00000000 00000000 10111110 10111110 00000111 00111000 00000100 01110101 00001011 10000011 11000110 00010000 10000001 11111110 11111110 00000111 01110101 11110011 11101011 00010110 10110100 00000010 10110000 00000001 10111011 00000000 01111100 10110010 10000000 10001010 01110100 00000001 10001011 01001100 00000010 11001101 00010011 11101010 00000000 01111100 00000000 00000000 11101011 11111110 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
O
diskpart
comando atual incluído no Windows 10 e 11 gravará o código de inicialização do BIOS no MBR quando os seguintes comandos forem emitidos após selecionar um disco.O mesmo é verdade se os seguintes comandos forem emitidos.
Então, encontrar código de boot no MBR não deve ser algo comum. Se você quisesse criar um MBR com uma tabela de partição vazia e nenhum código de boot, então digite os seguintes comandos.
Abaixo está uma cópia do código de inicialização da sua pergunta. Eu trunquei os zeros finais.
Se você copiar e colar no Online Assembler and Disassembler , você obtém a seguinte desmontagem para x86 (16). Note que precisei fazer isso duas vezes. A primeira parte do código de inicialização roda em um deslocamento de 0x7C00 e a parte restante roda em um deslocamento de 0x600.
Este é um código de inicialização de BIOS muito antigo que depende da parte CHS (Cylinder, Head, Sector) da tabela MBR. A parte LBA (Logical Block Addressing) da tabela MBR é ignorada. Abaixo está uma explicação do que as instruções fazem.
7c00: cli
7c01: mov ax, 0x1000
7c04: mov ss, ax
7c06: mov sp, 0xb000
7c09: mov ax, 0
7c0c: mov ds, ax
7c0e: mov es, ax
7c10: sti
Definir o local da pilha.
Definir registradores de segmento para zero.
Definir flag de interrupção.
7c11: mov si, 0x7c00
7c14: mov di, 0x600
7c17: mov cx, 0x200
7c1a: rep movsb byte ptr es:[di], byte ptr [si]
7c1c: ljmp 0:0x621
0621: mov si, 0x7be
0624: cmp byte ptr [si], al
0626: jne 0x633
0628: add si, 0x10
062b: cmp si, 0x7fe
062f: jne 0x624
0631: jmp 0x649
0633: mov ah, 2
0635: mov al, 1
0637: mov bx, 0x7c00
063a: mov dl, 0x80
063c: mov dh, byte ptr [si + 1]
063f: mov cx, word ptr [si + 2]
0642: int 0x13
O valor inicial de 3 bytes do CHS da entrada ativa da tabela de partição MBR é passado para o BIOS como o local inicial para leitura do primeiro HDD. Os 512 bytes lidos então sobrescrevem o MBR original colocado na memória no local 0x7C00 pelo BIOS.
0644: ljmp 0:0x7c00
0649: jmp 0x649
Uma desmontagem do código de inicialização do BIOS MBR atualmente usado pela Microsoft pode ser encontrada no apêndice desta resposta . Observe o seguinte com relação ao código de inicialização do BIOS MBR atual desmontado.
Read sectors
é onde o legado INT 13h AH=02h: Read Sectors From Drive está localizado. Isso usa valores CHS.Read sectors extended
é onde INT 13h AH=42h: Extended Read Sectors From Drive está localizado. Isso usa valores LBA.