Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| la_partie_executable_du_mbr [Le 20/04/2011, 15:33] – Nasman | la_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}} | + | {{tag> tutoriel mbr BROUILLON}} |
| ---- | ---- | ||
| ====== 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' | + | Si vous êtes arrivés sur cette page par erreur, faites demi tour sans tarder car ici se trouve l' |
| \\ | \\ | ||
| 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' | 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' | ||
| Ligne 16: | Ligne 17: | ||
| * Connaitre la numération hexadécimale. | * Connaitre la numération hexadécimale. | ||
| * Connaitre le langage assembleur | * Connaitre le langage assembleur | ||
| - | * Avoir installé un assembleur/ | + | * Avoir installé un assembleur/ |
| ===== Que se passe-t-il au démarrage d'un PC ? ===== | ===== Que se passe-t-il au démarrage d'un PC ? ===== | ||
| Ligne 29: | Ligne 30: | ||
| \\ | \\ | ||
| Une fois le chargement terminé et sans erreur, l' | Une fois le chargement terminé et sans erreur, l' | ||
| + | \\ | ||
| + | <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' | ||
| ===== Comment accéder à ces informations ===== | ===== Comment accéder à ces informations ===== | ||
| Ligne 52: | Ligne 54: | ||
| Le résultat brut pose problème car des chaines de texte ont été considérées comme des instructions et sont donc mal interprétées. Il faut alors procéder par tâtonnement pour les repérer (par exemple avec un éditeur hexa) et les exclure du traitement de désassemblage. | Le résultat brut pose problème car des chaines de texte ont été considérées comme des instructions et sont donc mal interprétées. Il faut alors procéder par tâtonnement pour les repérer (par exemple avec un éditeur hexa) et les exclure du traitement de désassemblage. | ||
| \\ | \\ | ||
| - | Une autre difficulté est que certaines adresses peuvent contenir, soit du code à un moment donné, soit des données (zone tampon) lorsque | + | Une autre difficulté est que certaines adresses peuvent contenir, soit du code à un moment donné, soit des données (zone tampon) lorsque le code n'est plus utilisé. |
| ===== Exemple de zone exécutable d'un mbr ===== | ===== Exemple de zone exécutable d'un mbr ===== | ||
| 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 et je me suis servi de la liste des interruptions effectuées par Ralph Brown accessible ici http:// | + | 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:// |
| + | | ||
| + | \\ | ||
| \\ | \\ | ||
| Voilà donc à quoi ressemble la chose. | Voilà donc à quoi ressemble la chose. | ||
| \\ | \\ | ||
| - | < | + | < |
| 00000000 | 00000000 | ||
| 00000002 | 00000002 | ||
| 00000003 | 00000003 | ||
| + | 00000004 resb 1 ; mode : 0x00 pour le mode CHS, 0x01 pour le mode LBA | ||
| - | ; Buffer pour disque dur | + | ; Buffer pour chargement en mode CHS |
| - | 00000004 resb 1 ; 0x00 | + | |
| 00000005 resd 1 ; nombre de secteurs | 00000005 resd 1 ; nombre de secteurs | ||
| 00000009 resd 1 ; nombre de têtes | 00000009 resd 1 ; nombre de têtes | ||
| 0000000D resd 1 ; nombre de cylindres | 0000000D resd 1 ; nombre de cylindres | ||
| - | ; Buffer pour extension | + | ; Buffer pour chargement en mode LBA |
| - | (00000004 resb 1 ; 0x01) | + | 00000005 |
| - | (00000005 | + | 00000007 resw 1 ; 0x0001 - nb blocs à transférer |
| - | (00000007 resw 1 ; 0x0001 - nb block à transférer) | + | 00000009 resw 1 ; 0x0000 |
| - | (00000009 resw 1 ; 0x0000) | + | 0000000B resw 1 ; 0x7000 - buffer en 0x70000000 |
| - | (0000000B resw 1 ; 0x7000 - buffer en 0x70000000) | + | 0000000D resd 1 ; 0x00000001 |
| - | (0000000D resd 1 ; 0x00000001) | + | 00000011 resd 1 ; 0x00000000 - démarrer au bloc 0x0000000000000001 |
| - | (00000011 resd 1 ; 0x00000000 - démarrer au bloc 0x0000000000000001) | + | |
| - | + | ||
| - | 00000004 | + | |
| - | 00000007 | + | |
| - | 00000009 | + | |
| - | 0000000B | + | |
| - | 0000000E | + | |
| - | 00000011 | + | |
| - | 00000014 | + | |
| - | 00000015 | + | |
| - | 00000017 | + | |
| - | 00000018 | + | |
| - | 0000001B | + | |
| - | 0000001C | ||
| - | 0000001D | ||
| - | 00000020 | ||
| - | 00000023 | + | 0000005A |
| - | 00000027 | + | 0000005C |
| - | 00000029 | + | 00000060 |
| - | 0000002D | + | 00000064 |
| - | 00000030 | + | |
| - | 00000032 | + | |
| - | 00000034 | + | |
| - | 00000037 | + | |
| - | 00000038 | + | |
| - | 0000003C | + | |
| - | 00000040 | + | |
| - | 00000042 | + | |
| - | 00000045 | + | |
| - | 00000047 | + | |
| - | 00000048 | + | |
| - | 0000004A | + | |
| - | 0000004E | + | |
| - | 00000050 | + | |
| - | 00000054 | + | |
| - | 00000056 | + | |
| - | 00000059 | + | |
| - | 0000005A | + | |
| - | 0000005C | + | |
| - | 00000060 | + | |
| - | 00000064 | + | |
| 00000065 | 00000065 | ||
| Ligne 141: | Ligne 108: | ||
| 00000081 | 00000081 | ||
| 00000083 | 00000083 | ||
| - | 00000085 | + | 00000085 |
| 00000087 | 00000087 | ||
| - | 00000088 | + | 00000088 |
| - | 0000008B | + | 0000008B |
| 0000008E | 0000008E | ||
| 00000090 | 00000090 | ||
| 00000093 | 00000093 | ||
| - | 00000096 | + | 00000096 |
| 00000099 | 00000099 | ||
| 0000009C | 0000009C | ||
| Ligne 161: | Ligne 128: | ||
| 000000AD | 000000AD | ||
| - | ; traitement extension | ||
| 000000AF | 000000AF | ||
| 000000B2 | 000000B2 | ||
| - | 000000B4 | + | |
| + | ; traitement extension lba_mode | ||
| + | 000000B4 | ||
| 000000B6 | 000000B6 | ||
| 000000B9 | 000000B9 | ||
| - | 000000BA | + | 000000BA |
| - | 000000BD | + | 000000BD |
| 000000C0 | 000000C0 | ||
| - | 000000C4 | + | 000000C4 |
| - | 000000C9 | + | 000000C9 |
| - | 000000CD | + | 000000CD |
| - | 000000D2 | + | 000000D2 |
| - | 000000D6 | + | 000000D6 |
| 000000DB | 000000DB | ||
| 000000DD | 000000DD | ||
| Ligne 181: | Ligne 149: | ||
| 000000E4 | 000000E4 | ||
| - | ; traitement sans extension | + | ; traitement sans extension |
| 000000E6 | 000000E6 | ||
| - | 000000E8 | + | 000000E8 |
| 000000EA | 000000EA | ||
| 000000EC | 000000EC | ||
| Ligne 190: | Ligne 158: | ||
| 000000F6 | 000000F6 | ||
| - | ; Disque dur OK | ||
| 000000F9 | 000000F9 | ||
| 000000FD | 000000FD | ||
| Ligne 206: | Ligne 173: | ||
| 0000011C | 0000011C | ||
| 00000120 | 00000120 | ||
| - | 00000123 | + | 00000123 |
| ; Convertit adresse linéaire en tête, secteur et cylindre | ; Convertit adresse linéaire en tête, secteur et cylindre | ||
| - | 00000125 | + | 00000125 |
| 00000129 | 00000129 | ||
| - | 0000012C | + | 0000012C |
| - | 0000012F | + | 0000012F |
| 00000131 | 00000131 | ||
| 00000133 | 00000133 | ||
| - | 00000137 | + | 00000137 |
| 0000013A | 0000013A | ||
| 0000013C | 0000013C | ||
| Ligne 233: | Ligne 200: | ||
| 0000015A | 0000015A | ||
| + | ; Copie des données chargées (partie commune mode CHS ou LBA) | ||
| 0000015C | 0000015C | ||
| 0000015D | 0000015D | ||
| 0000015E | 0000015E | ||
| 00000161 | 00000161 | ||
| - | 00000163 | + | 00000163 |
| 00000165 | 00000165 | ||
| 00000168 | 00000168 | ||
| Ligne 244: | Ligne 212: | ||
| 0000016D | 0000016D | ||
| 0000016E | 0000016E | ||
| - | 0000016F | + | 0000016F |
| Ligne 256: | Ligne 224: | ||
| 00000186 | 00000186 | ||
| - | ; Chaines | + | ; Chaînes |
| 00000188 | 00000188 | ||
| 0000018E | 0000018E | ||
| Ligne 274: | Ligne 242: | ||
| 000001B7 | 000001B7 | ||
| \\ | \\ | ||
| - | La partie | + | <note tip> |
| + | \\ | ||
| + | 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' | ||
| + | \\ | ||
| + | Le programme chargé en mémoire à l' | ||
| + | \\ | ||
| + | \\ | ||
| + | Différentes parties sont visibles : | ||
| + | \\ | ||
| + | \\ | ||
| + | de 065 à 095 - Routine vérifie que le boot s' | ||
| + | \\ | ||
| + | de 096 à 0b3 - Définit l' | ||
| + | \\ | ||
| + | de 0b4 à 0e5 - Charge le premier secteur de core.img en mode LBA (interruption bios int13/ | ||
| + | \\ | ||
| + | de 0e6 à 0f8 - Récupère les paramètres du disque et gère les erreurs | ||
| + | \\ | ||
| + | de 0f9 à 124 - Sauvegarde ces paramètres | ||
| + | \\ | ||
| + | de 125 à 15b - Convertit l' | ||
| + | \\ | ||
| + | de 15c à 172 - Recopie le secteur chargé à son nouvel emplacement et saute à cet emplacement (première partie de core.img, soit diskboot.img) | ||
| + | \\ | ||
| + | de 173 à 187 - Affichage des messages d' | ||
| + | \\ | ||
| + | de 1ab à 1b0 - Affichage de caractères | ||
| + | \\ | ||
| + | de 1b2 à 1b7 - Affichage des chaînes des messages d' | ||
| \\ | \\ | ||
| - | Le programme chargé en mémoire à l' | ||
| ===== Voir aussi ===== | ===== Voir aussi ===== | ||
| \\ | \\ | ||
| - | * **(fr)** [[http:// | + | * **(fr)** [[https:// |
| - | * **(fr)**[[http:// | + | * **(fr)**[[https:// |
| - | * [[http:// | + | * [[https:// |
| - | * **(fr)**[[http:// | + | * **(fr)**[[https:// |
