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 21/04/2011, 17:20] – 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 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' | + | 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 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 [[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 142: | 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 162: | 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 182: | Ligne 149: | ||
| 000000E4 | 000000E4 | ||
| - | ; traitement sans extension | + | ; traitement sans extension |
| 000000E6 | 000000E6 | ||
| - | 000000E8 | + | 000000E8 |
| 000000EA | 000000EA | ||
| 000000EC | 000000EC | ||
| Ligne 191: | Ligne 158: | ||
| 000000F6 | 000000F6 | ||
| - | ; Disque dur OK | ||
| 000000F9 | 000000F9 | ||
| 000000FD | 000000FD | ||
| Ligne 207: | 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 234: | 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 245: | Ligne 212: | ||
| 0000016D | 0000016D | ||
| 0000016E | 0000016E | ||
| - | 0000016F | + | 0000016F |
| Ligne 257: | Ligne 224: | ||
| 00000186 | 00000186 | ||
| - | ; Chaines | + | ; Chaînes |
| 00000188 | 00000188 | ||
| 0000018E | 0000018E | ||
| Ligne 275: | 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'en-tête GPT et n'est plus disponible pour core.img. Il faudra donc mettre l' | ||
| + | \\ | ||
| + | Le programme chargé en mémoire à l' | ||
| + | \\ | ||
| + | \\ | ||
| + | Différentes parties sont visibles : | ||
| + | \\ | ||
| \\ | \\ | ||
| - | Le programme chargé en mémoire | + | de 065 à 095 - Routine vérifie que le boot s'effectue |
| \\ | \\ | ||
| + | de 096 à 0b3 - Définit l' | ||
| \\ | \\ | ||
| - | Différentes parties sont visibles | + | de 0b4 à 0e5 - Charge |
| - | de 004 à 01b - Routine qui recopie à une autre adresse | + | |
| \\ | \\ | ||
| - | de 01c à 037 - Détermine la partition de boot | + | de 0e6 à 0f8 - Récupère les paramètres du disque et gère les erreurs |
| \\ | \\ | ||
| - | de 038 à 059 - Détermine si le bios reconnait le système d' | + | de 0f9 à 124 - Sauvegarde ces paramètres dans la zone des paramètres de chargement |
| \\ | \\ | ||
| - | de 125 à 14a - Calcule les valeurs HSC à partir de la LBA | + | de 125 à 15b - Convertit l' |
| \\ | \\ | ||
| - | de 14c à 158 - Charge un secteur | + | de 15c à 172 - Recopie le secteur |
| \\ | \\ | ||
| - | de 173 à 186 - Gestion | + | de 173 à 187 - Affichage |
| \\ | \\ | ||
| de 1ab à 1b0 - Affichage de caractères | de 1ab à 1b0 - Affichage de caractères | ||
| \\ | \\ | ||
| - | de 1b2 à 1b7 - Affichage des chaines | + | de 1b2 à 1b7 - Affichage des chaînes |
| \\ | \\ | ||
| ===== Voir aussi ===== | ===== Voir aussi ===== | ||
| \\ | \\ | ||
| - | * **(fr)** [[http:// | + | * **(fr)** [[https:// |
| - | * **(fr)**[[http:// | + | * **(fr)**[[https:// |
| - | * [[http:// | + | * [[https:// |
| - | * **(fr)**[[http:// | + | * **(fr)**[[https:// |
