Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
la_partie_executable_du_mbr [Le 22/09/2016, 11:31] – [Exemple de zone exécutable d'un mbr] Nasmanla_partie_executable_du_mbr [Le 20/12/2021, 19:22] (Version actuelle) – passage de http à https sur les liens externes (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) wiki-corrector-bot
Ligne 1: Ligne 1:
 +
 . .
 {{tag> tutoriel mbr BROUILLON}} {{tag> tutoriel mbr BROUILLON}}
Ligne 5: Ligne 6:
 ====== Que trouve-t-on comme programme dans le mbr ====== ====== Que trouve-t-on comme programme dans le mbr ======
  
-Si vous êtes arrivés sur cette page par erreur, faites demi tour sans tarder car ici se trouve l'antre de la bête :-( - et il ne faut pas connaitre la peur car vous allez découvrir les entrailles de votre machine. 8-o+Si vous êtes arrivés sur cette page par erreur, faites demi tour sans tarder car ici se trouve l'antre de la bête :-( - où il ne faut pas connaître la peur car vous allez découvrir les entrailles de votre machine. 8-o
 \\ \\
 Le mbr est le premier secteur du disque chargé en mémoire lors du démarrage d'un ordinateur. Il a pour fonction principale de rechercher une partition où se trouve un système d'exploitation à lancer. Le mbr est le premier secteur du disque chargé en mémoire lors du démarrage d'un ordinateur. Il a pour fonction principale de rechercher une partition où se trouve un système d'exploitation à lancer.
Ligne 29: Ligne 30:
 \\ \\
 Une fois le chargement terminé et sans erreur, l'exécution se poursuit à l'adresse 0000:7C00, et donc suit les instructions qui figurent dans le premier secteur du mbr Une fois le chargement terminé et sans erreur, l'exécution se poursuit à l'adresse 0000:7C00, et donc suit les instructions qui figurent dans le premier secteur du mbr
 +\\ 
 +<note tip>Lors d'un démarrage en mode UEFI avec un disque GPT, le mbr (protector) ne semble quasiment pas utilisé et seul l'emplacement de l'en-tête GPT est nécessaire (unique entrée de la table des partitions du mbr protector)</note>
 ===== Comment accéder à ces informations ===== ===== Comment accéder à ces informations =====
  
Ligne 60: Ligne 62:
 J'ai effectué une analyse (partielle) du fonctionnement des différents morceaux mais des parties restent encore nébuleuses. J'ai effectué une analyse (partielle) du fonctionnement des différents morceaux mais des parties restent encore nébuleuses.
 \\ \\
-Le programme utilise des fonctions du bios (seules fonctions disponible à ce stade du démarrage du PC) et je me suis servi de la liste des [[http://www.ctyme.com/intr/int.htm|interruptions]]+Le programme utilise des fonctions du bios (seules fonctions disponibles à ce stade du démarrage du PC) et je me suis servi de la liste des [[http://www.ctyme.com/intr/int.htm|interruptions]]
  établies par Ralph Brown.  établies par Ralph Brown.
 \\ \\
Ligne 66: Ligne 68:
 Voilà donc à quoi ressemble la chose. Voilà donc à quoi ressemble la chose.
 \\ \\
-<code>; Programme chargé en 0000:7C00+<code>; Programme 16 bits chargé en 0000:7C00
 00000000  EB63              jmp short 0x65 00000000  EB63              jmp short 0x65
 00000002  90                nop 00000002  90                nop
Ligne 89: Ligne 91:
 0000005C  01000000          dd 0x00000001 ; Adresse LBA (valeur basse) où se trouve le secteur suivant de chargement (core.img) 0000005C  01000000          dd 0x00000001 ; Adresse LBA (valeur basse) où se trouve le secteur suivant de chargement (core.img)
 00000060  00000000          dd 0x00000000 ; Valeur haute du qword de l'adresse LBA 00000060  00000000          dd 0x00000000 ; Valeur haute du qword de l'adresse LBA
-00000064  FF                db 0xff             ; 0xff pour le chargement du noyau à partir du disque dur+00000064  FF                db 0xff             ; 0xff pour le chargement de core.img sur le disque de boot, si 0x80 premier disque dur, si 0x81 deuxième...
  
 00000065  FA                cli 00000065  FA                cli
Ligne 106: Ligne 108:
 00000081  3CFF              cmp al,0xff 00000081  3CFF              cmp al,0xff
 00000083  7402              jz 0x87 00000083  7402              jz 0x87
-00000085  88C2              mov dl,al ; si non égal à 0xff, sauvegardé dans dl+00000085  88C2              mov dl,al ; si non égal à 0xff, sauvegardé dans dl - si core.img est sur un autre disque
 00000087  52                push dx 00000087  52                push dx
-00000088  BB1704            mov bx,0x417 +00000088  BB1704            mov bx,0x417        ; adresse clavier 
-0000008B  802703            and byte [bx],0x3+0000008B  802703            and byte [bx],0x3   ; teste si une touche shift est activée
 0000008E  7406              jz 0x96 0000008E  7406              jz 0x96
 00000090  BE887D            mov si,0x7d88 ; pointe sur la chaine "GRUB" 00000090  BE887D            mov si,0x7d88 ; pointe sur la chaine "GRUB"
Ligne 203: Ligne 205:
 0000015E  B90001            mov cx,0x100 0000015E  B90001            mov cx,0x100
 00000161  8EDB              mov ds,bx ; charge le segment du buffer 00000161  8EDB              mov ds,bx ; charge le segment du buffer
-00000163  31F6              xor si,si ; ds:di pointe sur 7000:0000+00000163  31F6              xor si,si ; ds:si pointe sur 7000:0000
 00000165  BF0080            mov di,0x8000 00000165  BF0080            mov di,0x8000
 00000168  8EC6              mov es,si ; es:di pointe sur 0000:8000 00000168  8EC6              mov es,si ; es:di pointe sur 0000:8000
Ligne 240: Ligne 242:
 000001B7  C3                ret</code> 000001B7  C3                ret</code>
 \\ \\
-La partie qui commence à l'adresse hexa 65 est commune avec le fichier boot.img qui se trouve dans /boot/grub/+<note tip>L'emplacement de la LBA où se trouve core.img est indiquée en 5c (8 octets). 
 +\\ 
 +Ici nous avons la LBA qui vaut 1, soit le secteur qui suit le mbr. Dans le cas d'un partitionnement GPT cet emplacement est occupé par l'en-tête GPT et n'est plus disponible pour core.img. Il faudra donc mettre l'adresse LBA de la partition bios_boot pour le boot en mode bios sur un disque GPT</note> 
 +\\ 
 +Le programme chargé en mémoire à l'adresse 0000:7c00 commence par l'instruction jmp short 0x65 qui saute directement à l'adresse 065 
 +\\
 \\ \\
-Le programme chargé en mémoire à l'adresse 0000:7c00 commence par l'instruction jmp short 0x65 qui saute directement dans la partie commune à boot.img+Différentes parties sont visibles :
 \\ \\
 \\ \\
-Différentes parties sont visibles 
 de 065 à 095 - Routine vérifie que le boot s'effectue à partir du disque dur de 065 à 095 - Routine vérifie que le boot s'effectue à partir du disque dur
 \\ \\
 de 096 à 0b3 - Définit l'emplacement des paramètres de chargement du prochain secteur et le mode CHS ou LBA selon les capacités du bios de 096 à 0b3 - Définit l'emplacement des paramètres de chargement du prochain secteur et le mode CHS ou LBA selon les capacités du bios
 \\ \\
-de 0b4 à 0e5 - Charge le premier secteur de core.img en mode LBA (interruption bios int13/ah-42h)+de 0b4 à 0e5 - Charge le premier secteur de core.img en mode LBA (interruption bios int13/ah=42h)
 \\ \\
 de 0e6 à 0f8 - Récupère les paramètres du disque et gère les erreurs de 0e6 à 0f8 - Récupère les paramètres du disque et gère les erreurs
Ligne 269: Ligne 275:
 \\ \\
    
-  * **(fr)** [[http://fr.wikipedia.org/wiki/Master_boot_record]] +  * **(fr)** [[https://fr.wikipedia.org/wiki/Master_boot_record]] 
-  * **(fr)**[[http://fr.wikipedia.org/wiki/Partition_de_disque_dur]] +  * **(fr)**[[https://fr.wikipedia.org/wiki/Partition_de_disque_dur]] 
-  * [[http://forum.ubuntu-fr.org/viewtopic.php?id=390336]] sur le forum ubuntu-fr +  * [[https://forum.ubuntu-fr.org/viewtopic.php?id=390336]] sur le forum ubuntu-fr 
-  * **(fr)**[[http://fr.wikipedia.org/wiki/Logical_block_addressing]]+  * **(fr)**[[https://fr.wikipedia.org/wiki/Logical_block_addressing]]