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:38] – [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 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 165: Ligne 167:
 0000010D  88F4              mov ah,dh ; 2 bits de poids fort cylindre 0000010D  88F4              mov ah,dh ; 2 bits de poids fort cylindre
 0000010F  40                inc ax ; nb de cylindres 0000010F  40                inc ax ; nb de cylindres
-00000110  894408            mov [si+0x8],ax ; sLa partie qui commence à l'adresse hexa 65 est commune avec le fichier boot.img qui se trouve dans /boot/grub/ +00000110  894408            mov [si+0x8],ax ; sauvegardé en 7c0d
-\\ +
-auvegardé en 7c0d+
 00000113  0FB6C2            movzx ax,dl ; copie le numéro maxi de secteurs (x4) 00000113  0FB6C2            movzx ax,dl ; copie le numéro maxi de secteurs (x4)
 00000116  C0E802            shr al,0x2 ; numéro maxi de secteurs=nb secteurs 00000116  C0E802            shr al,0x2 ; numéro maxi de secteurs=nb secteurs
Ligne 205: 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 241: Ligne 241:
 000001B5  75F4              jnz 0x1ab ; teste la fin de la chaine 000001B5  75F4              jnz 0x1ab ; teste la fin de la chaine
 000001B7  C3                ret</code> 000001B7  C3                ret</code>
 +\\
 +<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 à l'adresse 065
Ligne 271: 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]]