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édentes Révision précédente
Prochaine révision
Révision précédente
la_partie_executable_du_mbr [Le 22/09/2016, 11:38]
Nasman [Exemple de zone exécutable d'un mbr]
la_partie_executable_du_mbr [Le 20/12/2021, 19:22] (Version actuelle)
wiki-corrector-bot 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)
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]]
  
  
  • la_partie_executable_du_mbr.1474537118.txt.gz
  • Dernière modification: Le 22/09/2016, 11:38
  • par Nasman