AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1875894
Accepted
james
james
Asked: 2025-02-02 03:47:28 +0800 CST2025-02-02 03:47:28 +0800 CST 2025-02-02 03:47:28 +0800 CST

Para que serve o código de inicialização do MBR não inicializável?

  • 772

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
boot
  • 1 1 respostas
  • 297 Views

1 respostas

  • Voted
  1. Best Answer
    David Anderson
    2025-02-02T14:38:32+08:002025-02-02T14:38:32+08:00

    O diskpartcomando 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.

    clean 
    convert mbr
    

    O mesmo é verdade se os seguintes comandos forem emitidos.

    clean
    create partition
    

    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.

    clean 
    convert gpt
    convert mbr
    

    Abaixo está uma cópia do código de inicialização da sua pergunta. Eu trunquei os zeros finais.

    fab800108ed0bc00b0b800008ed88ec0fbbe007cbf0006b90002f3a4ea21060000bebe073804750b83c61081fefe0775f3eb16b402b001bb007cb2808a74018b4c02cd13ea007c0000ebfe
    

    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.

    0x0000000000007c00:  FA                cli       
    0x0000000000007c01:  B8 00 10          mov       ax, 0x1000
    0x0000000000007c04:  8E D0             mov       ss, ax
    0x0000000000007c06:  BC 00 B0          mov       sp, 0xb000
    0x0000000000007c09:  B8 00 00          mov       ax, 0
    0x0000000000007c0c:  8E D8             mov       ds, ax
    0x0000000000007c0e:  8E C0             mov       es, ax
    0x0000000000007c10:  FB                sti       
    0x0000000000007c11:  BE 00 7C          mov       si, 0x7c00
    0x0000000000007c14:  BF 00 06          mov       di, 0x600
    0x0000000000007c17:  B9 00 02          mov       cx, 0x200
    0x0000000000007c1a:  F3 A4             rep movsb byte ptr es:[di], byte ptr [si]
    0x0000000000007c1c:  EA 21 06 00 00    ljmp      0:0x621
    0x0000000000000621:  BE BE 07          mov  si, 0x7be
    0x0000000000000624:  38 04             cmp  byte ptr [si], al
    0x0000000000000626:  75 0B             jne  0x633
    0x0000000000000628:  83 C6 10          add  si, 0x10
    0x000000000000062b:  81 FE FE 07       cmp  si, 0x7fe
    0x000000000000062f:  75 F3             jne  0x624
    0x0000000000000631:  EB 16             jmp  0x649
    0x0000000000000633:  B4 02             mov  ah, 2
    0x0000000000000635:  B0 01             mov  al, 1
    0x0000000000000637:  BB 00 7C          mov  bx, 0x7c00
    0x000000000000063a:  B2 80             mov  dl, 0x80
    0x000000000000063c:  8A 74 01          mov  dh, byte ptr [si + 1]
    0x000000000000063f:  8B 4C 02          mov  cx, word ptr [si + 2]
    0x0000000000000642:  CD 13             int  0x13
    0x0000000000000644:  EA 00 7C 00 00    ljmp 0:0x7c00
    0x0000000000000649:  EB FE             jmp  0x649
    

    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.

    Código          Comentário
    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
    Limpar flag de interrupção.
    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]
    Copie todos os 512 bytes de si mesmo para um novo local, começando em 0x600.
    7c1c: ljmp 0:0x621 Pule para continuar a execução no novo local.
    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
    Pesquise cada uma das 4 entradas da tabela de partição para um byte de status diferente de zero. O código assume que um valor diferente de zero significa que a partição está ativa. Se encontrado, vá para 0x633. Caso contrário, pule para um loop infinito em 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
    Execute um INT 13h AH=02h: Read Sectors From Drive .
    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 Pule para continuar a execução em 0x7C00.
    0649: jmp 0x649 Executa um loop infinito. Isso pode acontecer quando nenhuma partição é sinalizada como ativa.

    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.

    • Este código pode lidar com pequenas unidades legadas que usam endereçamento CHS e também lidar com unidades modernas que usam LBA.
    • O comentário Read sectorsé onde o legado INT 13h AH=02h: Read Sectors From Drive está localizado. Isso usa valores CHS.
    • O comentário Read sectors extendedé onde INT 13h AH=42h: Extended Read Sectors From Drive está localizado. Isso usa valores LBA.
    • Há mensagens a serem emitidas quando ocorre um erro.
    • 5

relate perguntas

  • Como limpar completamente o disco do laptop para uma nova instalação do Ubuntu?

  • Log de instalação do Windows 10 na máquina que não inicializa

  • Minha BIOS quebrou

  • Como posso saber em qual unidade o Windows está instalado?

  • A tela inicial do Maya 2018 desaparece - não inicia

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve