1. A breve aggiorneremo la piattaforma di Reboot per risolvere alcuni problemi con i plug-in, quindi chiediamo ancora un po' di pazienza, Lo staff di Reboot

Cos'è una Master Boot Record e come "divertirsi" con essa

Discussione in 'Software' iniziata da Unknown, 19 Ott 2019.

  1. Unknown

    Unknown Livello 2

    Iscritto:
    27 Dic 2017
    Messaggi:
    20
    Like ricevuti:
    14
    Cos'è una Master Boot Record (MBR)?

    é consigliata la lettura di questo se non si conoscono i termini basici

    In questo thread parlerò solo di BIOS e MBR, e non di UEFI e GPT

    La master boot record è il primo settore di un disco e contiene il codice che viene eseguito dal BIOS dopo l' accensione del PC.
    Un computer, per poter sapere dove trovare dei dati, ha bisogno di dividere un disco in settori. ogni settore è grande 512 byte e si contano da 0 (il primo settore è il settore 0, il secondo il settore 1 e così via)
    Ci sono due tipi di Master Boot Record.

    Il primo, è quello AVVIABILE, e contiene, oltre alla Partition Table e al codice da eseguire, negli ultimi 2 byte una firma, che fa capire al bios che quel settore è avviabile. questa firma è 0x55AA

    Il secondo, quello NON AVVIABILE, contiene solo la Partition Table e non ha la firma.

    La Partition table o Tabella delle Partizioni, contiene le istruzioni su come leggere una partizione.

    Una partizione è una zona conosciuta di un disco, dove il sistema operativo può muoversi tra directories(cd), creare directories (md) rimuovere directories (rd) e creare files.
    Ci sono più tipi di partizioni, ma ora parlerò solo di partizione primaria e estesa.
    Una partizione primaria è una partizione "semplice", che puoi formattare in FAT32, NTFS, ext4...

    Una partizione estesa, invece è una partizione che contiene altre partizioni (non "fisiche", ma logiche), ed è stata inventata per ovviare ad un semplice problema: MBR può avere un massimo di 4 partizioni "fisiche".In una partizione estesa, puoi mettere quante partizioni vuoi, (non estese).

    Guarda la foto: sul disco 0 ci sono 3 partizioni in blu scuro (primarie) e una estesa (il riquadro verde) che contiene 4 partizioni logiche (blu)
    Esempio di disco a più partizioni:
    [​IMG]
    Le MBR del "primo tipo" vengono utilizzate, ad esempio sul tuo pc: la MBR carica il sistema operativo in ram e lo fa partire (spiegazione maccheronica).

    Quelle del "secondo tipo", invece sono utilizzate in chiavette usb, schede sd e in generale, dispositivi di archiviazione non contenenti un sistema operativo da avviare.


    Ora che sai cos'è e come funziona una MBR, creeremo una semplice MBR con vari esempi.

    Materiale:

    Un programma per scrivere del codice assembly (non usare il notepad di windows o gedit e nano su linux), io ti consiglio Notepad++ o Visual Studio Community (è abbastanza pesante, quindi se non intendi usarlo anche per altro (C, C#, C++, VB.net), usa Notepad++)
    Un compilatore Assembly (io uso NASM )
    L' ultima versione di QEMU per testare le MBR create
    L' ultima versione di HxD (solo per l' ultima parte facoltativa) (Scarica la versione installabile, è più comoda)


    Sezione 0 - Aggiunta di NASM e QEMU alla variabile path su Windows

    • Apri il Pannello di Controllo (WIN+R e digita "control")
    • Vai su Sistema e sicurezza
    • Vai su Sistema
    • Clicca su Impostazioni di sistema avanzate
      pan.png
    • clicca in fondo su Variabili d' ambiente
    • trova nel riquadro in basso la variabile Path e cliccaci sopra
    • Clicca su Modifica
    • Clicca su Nuovo e scrivi il percorso dove hai installato NASM (quello di default è "C:\Program Files\NASM")
    • Fai la stessa cosa usando il precorso dove hai installato qemu (quello di default è "C:\Program Files\qemu")
    • Premi OK, poi chiudi le finestre
    MBR che non fa niente

    Partiamo con la prima MBR.
    Crea una cartella sul desktop e crea due file: bootloader.asm e Makefile.bat
    apri Makefile.bat per modificarlo e copia e incolla questo script
    Codice:
    nasm bootloader.asm -f bin -o boot.bin
    qemu-system-i386 -hda boot.bin
    
    Salva e apri adesso col programma scelto prima bootloader.asm

    per iniziare, incolla questo codice Assembly a 16 bit
    Codice:
    [bits 16] ;; Imposta la modalità 16 bit
    [org 0x7C00]
    
    jmp $ ;; Vai alla posizione corrente
    
    times 510 - ($ - $$) db 0 ;;scrivi 0 sullo spazio restante (non usiamo tutti e 512 i byte)
    dw 0xAA55 ;; La firma
    Esegui Makefile.bat e dovrebbe aprirsi qualcosa tipo questo
    mbr1.PNG
    Testo

    Crea un altra cartella sul desktop e crea i due file: bootloader.asm e Makefile.bat
    apri Makefile.bat per modificarlo e copia e incolla questo script
    Codice:
    nasm bootloader.asm -f bin -o boot.bin
    qemu-system-i386 -hda boot.bin
    
    Salva e apri adesso col programma scelto prima bootloader.asm

    Ora il codice in assembly si fa migliore
    Codice:
    [bits 16]
    [org 0x7c00]
    
    loop: ;; Il loop
        mov si, my_string
        call print_string
        jmp loop ;; se non vuoi un loop metti ";;" prima di jmp
    
    print_char: ;; Mostra il carattere
        mov ah, 0x0e
        mov bh, 0x00
        mov bl, 0x07
    
        int 0x10
        ret
    
    print_string:
    next_char: ;; Per andare al carattere successivo
        mov al, [si]
        inc si
        or al, al
        jz exit_function
        call print_char
        jmp next_char
    exit_function:
        ret
    
    my_string db 'Il mio testo!!', 0 ;; Puoi cambiare "il mio testo" con quello che vuoi
    
    times 510 - ($ - $$) db 0
    dw 0xaa55
    
    Esegui Makefile.bat e dovresti vedere il testo (in loop o no a seconda di come hai modificato il codice

    Colori (cambiano velocemente, se sei sensibile non eseguirlo)

    Stessa cosa ma con codice diverso. Ora si avvierà una call al VideoService.

    Codice:
    [bits 16]
    [org 0x7c00]
    start:
    
        ;; Call VideoService interrupt 0x10
        ;; ah = 0x00 -> SetVideoMode
        ;; al = 0x13 -> 320x200 16 colori
        mov ah, 0x00
        mov al, 0x13
        int 0x10
    
        ;; Registri per il video
        ;;   es:di = 0xa000:0x0000
        mov ax, 0xa000
        mov es, ax
        xor di, di
    
        ;; Fill usando il colore del registro
        ;; it will start with color 0x00
        mov cx, 0x0000
    .loop:
        mov byte [es:di], al
        inc di
        cmp di, 0xffff
        jnz .loop
    
        ;; Incrementa il  colore
        inc al
    
        ;; Imposta i registri a 0
        xor di, di
        jmp .loop ;; il loop
    
    
    times 510 - ($ - $$) db 0
    dw 0xaa55
    
    Flashare queste MBR su un disco (consiglio una chiavetta usb)


    Attenzione: questa operazione renderà i dati del disco INUTILIZZABILI, quindi fai un backup
    Inoltre, potresti rendere ILLEGGIBILE il disco se non esegui i passaggi correttamente
    Procedendo, ti assumi le responsabilità in caso di danneggiamento dell' hardware o del software

    • Inserisci il disco.
    • Apri HxD come Amministratore
    • Apri il file "boot.bin" della MBR che hai creato
    • Clicca in alto su Extra e poi su apri disco
    • Scegli il disco fisico da modificare (NON Hard Disk 1) e rimuovi l' opzione Apertura il sola lettura.
    • Accetta di assumerti le responsabilità in caso di danneggiamento
    • Seleziona tutto il codice esadecimale di boot.bin e copialo
    • Incolla all' inizio del settore 0 e salva.
    • Prova il disco riavviando il pc (se non parte può dipendere da vari fattori, i più comuni: BIOS non configurato, PC con UEFI e Secure Boot abilitato..)
    se vuoi sapere di più riguardo all' osdev, ti rimando ad un thread di iostream :smile:


    Grazie a:
    Me xD
    iostream per l' introduzione
     
    #1
    Ultima modifica: 19 Ott 2019
    A student piace questo elemento.
  2. Unknown

    Unknown Livello 2

    Iscritto:
    27 Dic 2017
    Messaggi:
    20
    Like ricevuti:
    14
    uffa i link sono stra buggati :pensive:
     
    #2
  3. matvigl

    matvigl Staff NonninoWii Staff

    Iscritto:
    21 Dic 2014
    Messaggi:
    2.773
    Like ricevuti:
    844
    link sistemati
     
    #3
  4. Unknown

    Unknown Livello 2

    Iscritto:
    27 Dic 2017
    Messaggi:
    20
    Like ricevuti:
    14
    grazie, nell' editor funzionavano ma quando applicavo i cambiamenti non chiudeva le paarentesi quadre
     
    #4
Sto caricando...

Condividi questa Pagina