Brève FAQ sur le MBR (Master Boot Record). Installer Windows sur un disque converti de MBR en GPT sans perdre de données sur des partitions non système. Windows mbr est compatible avec un disque gpt.

La situation est la suivante. Il y a une vis de 160 Go. Il dispose de 2 partitions – 40 Go et 120 Go. Afin d'installer Ubuntu comme deuxième système, une répartition de 120 Go -> 100+10+2+8 a été réalisée.
Résultats
1. Lorsque le système démarre, le message MBR helper not found s'affiche ;
2. fdisk affiche un grand disque de 160 Go.

L'imbécile comprend que c'est le début d'une soirée amusante.
De plus, sous la coupe, des solutions au problème.

1. Récupération de table de partition

1.1. Magie séparée
Cette distribution LiveCD\USB, d'une taille de 100 Mo, contient un énorme tas de logiciels pour travailler avec des disques. De la panne à la restauration.
De tous, nous aurons besoin gpart, disque de test, fdisque Et ms-sys.
1.2. Gpart
gpart est un utilitaire qui analyse un disque secteur par secteur à la recherche de partitions présentes sur le support mais pas dans la table. Dans son travail, il ignore la table déjà existante (si présente). Le programme a été développé par le programmeur allemand Michail Brzitwa et n'est plus pris en charge par lui. Un développement lent est réalisé par les équipes Fedora et Debian. La version actuelle est de 0,1h.

L'utilitaire vous permet de restaurer rapidement et facilement la table de partition, mais il présente plusieurs inconvénients. Premièrement, le développement a été abandonné depuis longtemps, et deuxièmement, il ne définit parfois pas tout à fait correctement les sections.

Gpart peut fonctionner selon 2 modes. Il s’agit d’une analyse rapide et d’une analyse détaillée. Dans certains cas, le premier mode suffit. Nous allons examiner le deuxième.

Gpart -if /dev/sda

-je- mode interactif. Pour chaque pièce trouvée, une question sera posée pour savoir si elle doit être sauvegardée ou ignorée.
-F- analyse complète du disque.

Après un certain temps, un rapport sera créé avec des sections possibles. C’est ce que vous devez parcourir aussi attentivement que possible avant d’enregistrer.
Exemple de rapport (pas le mien) :

Commencer l'analyse...
Partition possible (DOS FAT), taille (1907 Mo), décalage (0 Mo)
Partition possible (système de fichiers SGI XFS), taille (5 730 Mo), décalage (1 907 Mo)
Terminer l'analyse.
Vérification des partitions...
Partition (DOS ou Windows 95 avec FAT 32 bits, LBA) : principale
Partition (système de fichiers Linux ext2) : primaire
D'accord.
Table de partition principale devinée :
Partition principale(1)
tapez : 012(0x0C)(DOS ou Windows 95 avec FAT 32 bits, LBA)
taille : 1907 Mo #s(3906544) s(16-3906559)
chs : (0/1/1)-(1023/19/16)d (0/1/1)-(12207/19/16)r
Partition principale(2)
tapez : 131 (0x83) (système de fichiers Linux ext2)
taille : 5 730 Mo #s(11736000) s(3906560-15642559)
chs : (19/1023/16)-(19/1023/16)d (12208/0/1)-(48882/19/16)r
Partition principale(3)
tapez : 000(0x00)(inutilisé)
taille : 0 Mo #s(0) s(0-0)

Partition principale(4)
tapez : 000(0x00)(inutilisé)
taille : 0 Mo #s(0) s(0-0)
chs : (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Si tout va bien, alors nous acceptons d'écrire sur la table de partition, croisons les doigts et redémarrons.
Dans mon cas, le programme a identifié les partitions qui étaient là avant la partition (40 et 120), ce qui n'était pas adapté et m'a obligé à rechercher des méthodes de récupération alternatives.

1.3. disque de test
Remarque : cet utilitaire est décrit plus en détail dans cet article, je ne le répéterai pas ici.

Cet utilitaire est similaire au précédent, mais présente de nombreux avantages :
1. plus récent et activement soutenu ;
2. subjectif, cela fonctionne beaucoup plus vite ;
3. plus fonctionnel ;
4. il existe une interface de console simple basée sur ncurses.

Aller!
1. dans la première fenêtre, sélectionnez Créer un nouveau fichier journal ;
2. sélectionnez le disque souhaité (/dev/sda) -> Continuer ;
3. marquez le type de partition comme Intel ;
4. sélectionnez Analyser la structure de partition actuelle et recherchez les partitions perdues ;
5. si les partitions trouvées sont correctes, cliquez sur Sauvegarder et passez à l'étape 6, il est possible de réanalyser rapidement le disque s'il y a une erreur quelque part (Recherche rapide) ;
6. Une liste verte avec des sections est déjà visible ici. Si tout va bien, notez-le, sinon lancez une recherche approfondie.;

Dans mon cas, le résultat était similaire à celui de gpart, ce qui est incorrect.
Après avoir lancé la recherche approfondie, après avoir attendu environ 40 minutes, j'ai reçu une réponse qui m'a fait me sentir tellement mieux.
Plusieurs partitions se chevauchaient (il s'agissait de l'originale (avant manipulation) de 120 Go et de la nouvelle de 100 Go). Après avoir marqué l'inutile comme supprimé, j'ai écrit la table sur le disque et redémarré. Heureusement, tout s'est bien passé et l'ordinateur est revenu à son état d'origine, et j'ai pu me coucher la conscience tranquille.

3. Récupération du MBR

Pour cette tâche, nous avons l'outil ms-sys dans notre arsenal.
Tout d'abord, découvrons ce qui ne va pas avec notre MBR.

Ms-sys /dev/sda
/dev/sda a un secteur de démarrage x86
c'est un secteur de démarrage inconnu

Vous pouvez maintenant voir que ce disque n'a pas de secteur de démarrage.
L'utilitaire peut fonctionner avec le MBR de différents systèmes d'exploitation. La liste peut être obtenue en exécutant le programme sans arguments. Dans mon cas, c'était nécessaire à partir de Windows 7.
Écrivez le MBR sur le disque :

Ms-sys -7 /dev/sda
L'enregistrement de démarrage principal de Windows 7 a été écrit avec succès dans /dev/sda

Nous vérifions:

Ms-sys /dev/sda
il s'agit de l'enregistrement de démarrage principal de Microsoft 7, comme celui-ci
le programme crée avec le commutateur -7 sur un périphérique de disque dur.

C'est tout, le MBR requis est installé et vous pouvez redémarrer.

3. Sortie

Cet article est un exemple de la façon dont vous pouvez vous créer un problème à partir de nulle part et passer la moitié de la nuit à faire la mauvaise chose. Mais cela m'a donné une expérience inestimable, que j'ai essayé de présenter ici.
Peut-être que cela sera utile à quelqu'un. Après tout, il n’est pas très difficile de se retrouver dans une telle situation, mais il n’existe pas vraiment de manuel détaillé.

MBR et GPT. Questions principales.

MBR et GPT - définition.

Windows nous propose 2 options : Enregistrement de démarrage principal(MBR) – Enregistrement de démarrage principal – et Table de partition d'identifiant unique au monde(GPT) – Identificateur de table de partition unique au monde. Ce dernier a reçu un soutien à partir des versions Vista/Windows Server 2008 . Cependant Windows XP 64 bit supportait également ce format.

MBR- elle est pareille Enregistrement de démarrage principal– Il s’agit de l’enregistrement de démarrage principal sur le disque dur. Il se situe au tout début du disque dur, c'est-à-dire dans les premiers secteurs du disque dur. Sa tâche est de sélectionner la partition de disque dans laquelle le système d'exploitation démarrera (en fait, le master boot record a été créé à cet effet). Cela se fait à l'aide d'un code d'exécution court, que le BIOS, après autodiagnostic, télécharge sur . Ensuite, le code en cours d'exécution dans le MBR prend les rênes et charge le système d'exploitation dans la partition spécifiée du disque dur (les informations sur les partitions sont également contenues dans l'enregistrement de démarrage). D'ailleurs, c'est pourquoi un enregistrement de démarrage principal ne peut pas être créé sur un disque qui ne peut pas être divisé en parties, et vice versa, il peut être créé là où il est possible de diviser le support de stockage en plusieurs périphériques de disque, bien que virtuels.

Si le MBR est endommagé, le système d'exploitation ne démarrera jamais. Si non seulement l'enregistrement MBR est endommagé, mais également le secteur contenant l'enregistrement de démarrage principal, le disque ne peut être utilisé que comme porte-gobelet ou brisé en aimants et donné à un enfant pour qu'il joue avec.

MBR et GPT. Pourquoi s’éloignent-ils du MBR ?

En raison de l'âge du développement, MBR ne comprend pas ce qu'est un grand espace disque. Pour le MBR, « grand » commence à 2,2 téraoctets. MBR, je le répète, ne lit pas de tels volumes et n'est pas capable de les afficher. De plus, le MBR perçoit l'existence de seulement quatre partitions principales, ou trois partitions principales plus une étendue. Ainsi, si davantage de partitions sont nécessaires, l'utilisateur devra créer une structure secondaire sur l'espace disque. Pour un utilisateur de PC, il s'agit d'une partition étendue, c'est-à-dire un type spécial de partition de disque qui est une extension de la partition principale. Contient un enregistrement de démarrage principal (MBR) avec sa propre table de partition, ce qui vous permet d'ignorer la limitation de cette table et vous permet d'avoir plus de quatre partitions sur le disque. Votre disque dur peut avoir, vous l’aurez deviné, plusieurs partitions étendues. Et après avoir créé une partition étendue, vous devez créer une ou plusieurs partitions logiques... En général, les règles de partitionnement du MBR sont complexes et limitées. Par conséquent, dans la lutte entre les tables MBR et GPT, GPT remplace partout l’enregistrement de démarrage principal.

MBR et GPT. Qu’est-ce que le GPT ?

Google Tag– Table de partition GUID (Globally Unique Identifier) ​​– table de partition avec un identifiant globalement (statiquement) unique. Techniquement parlant, GPT utilise un système d'adressage de blocs logiques plus moderne, qui permet non seulement de dépasser la barre des 2,2 To, mais également de créer et de traiter avec succès des disques d'une capacité d'un peu plus de 9 zettaoctets, c'est-à-dire que vous pouvez oublier le volume limitation pour la partition créée. De plus, GPT est plus fiable car la table des matières et la table de partition du disque sont écrites à la fois au début et à la fin du disque. Si l’un d’eux est endommagé, le second est restitué à l’image et à la ressemblance du survivant. Cela enlève une certaine quantité d'espace « vivant » au disque dur et, par conséquent, à vous et moi, donc les petits disques sont tout à fait viables avec MBR et GPT. Il est logique d'installer délibérément GPT uniquement sur des disques d'une capacité de 500 Go ou plus (de préférence même plus).
De plus, grâce aux innovations, le nombre de partitions sur un disque dur est désormais illimité. 128 versions de systèmes d'exploitation Windows sur un ordinateur n'ont bien sûr pas de sens, mais dans certains cas, l'installation simultanée de plusieurs systèmes d'exploitation de générations différentes est tout à fait justifiée. Cependant, en parlant de différentes générations, je parle uniquement des dernières versions de Windows, à commencer par Vista. Oui, les systèmes d'exploitation jusqu'à XP dans la version 32 bits incluant GPT ne sont pas pris en charge. Et bien sûr, n'oubliez pas le problème du seuil de 2 To si vous êtes l'heureux propriétaire de tels volumes d'informations. C’est là que commence à se poser la question de la reconversion en MBR, dont j’aborderai un peu plus tard. La seule chose que je mentionnerai tout de suite, c'est que les questions sur la table de partition du disque dur (MBR et GPT) et le logiciel de base installé de la carte mère (BIOS ou UEFI) sont inextricablement liées lors de l'installation du système d'exploitation.

MBR et GPT. Comparaison.

Quelle différence cela fait-il pour moi ?

Si vous n’avez pas de multi-boot, alors presque aucun. Comme vous l'avez déjà compris, les systèmes d'exploitation modernes de la famille Windows fonctionnent parfaitement sous le contrôle des deux tables de fichiers. Juste au moment d'installer des systèmes d'exploitation ou d'envisager l'option d'une version multi-boot (vous aurez besoin d'un MBR) d'un ordinateur, l'utilisateur doit se rappeler quelques points :

  • GPT - plus moderne
  • GPT nécessitera que Windows démarre uniquement en mode (vous devrez oublier les chargeurs de démarrage précédents)
  • Le MBR nécessite que les anciennes générations de Windows démarrent en mode BIOS (cependant, les versions 64 bits peuvent démarrer en mode UEFI)

Avec cela, je propose de terminer la partie théorique sur le MBR et le GPT et de passer aux questions pratiques d'installation des systèmes d'exploitation et de conversion des tables de disques :

Comment puis-je savoir quelle version de table je possède ?

C'est facile à vérifier, comme toujours. Maintenez les touches enfoncées Windows + R, entrez la commande diskmgmt.msc. Dans la fenêtre de la console, sélectionnez à gauche Gestion de disque. Sélectionnez l’une des sections, faites un clic droit et cliquez Propriétés(la même fenêtre peut être trouvée directement depuis l'Explorateur système avec une liste de lecteurs locaux) :

Dans la fenêtre, parmi les disques disponibles (tout y est), sélectionnez le disque dur qui vous intéresse et double-cliquez à nouveau dessus. La fenêtre des propriétés du lecteur spécifique apparaîtra, où vous trouverez un onglet À M. Nous y trouverons un bouton Remplir:

Vous pouvez entrer de l'autre côté. Utilitaire Windows

Dans la console, nous tapons les commandes séquentiellement :

Disque de liste Diskpart

Et que voit-on ? Il n'y a rien sous l'identifiant GPT, ce qui signifie que ce style de partition n'a rien à voir avec ce disque :

Bonne chance à nous tous

Lire : 283

Bonjour les amis! La dernière version de Windows 10 est apparue (l'utilitaire ne convertit pas GPT en MBR), mais vous ne pouvez convertir les disques durs qu'avec le système d'exploitation installésystème. Si installé Windows 10 , vous pouvez alors convertir en ligne et hors ligne . Windows 7 et Win 8 uniquement hors ligne, je n'ai pas essayé de convertir vers Vista.Mais s'il est nécessaire de convertir un disque dur sans système d'exploitation, alorsça peut être fait comme ça.

Dans Gestion des disques, cela montre que j'ai 3 disques physiques. Deux ont un balisage GPT. Un partitionnement MBR.

Vers un disque avec des marquages MBR J'ai décidé d'installer le système d'exploitation Windows 8.1 et pour ce faire j'ai libéré de l'espace dessus.

J'ai trois options d'installation. Installez le système d'exploitation avec votre chargeur de démarrage sur le disque MBR , mais le système d'exploitation installé démarrera alors en mode Legacy. Ce n'est pas tout à fait pratique pour moi, puisque j'ai déjà le système d'exploitation installé sur mes disques Google Tag et ils démarrent en mode UEFI.

Deuxième option, installer le système d'exploitation sur le disque MBR , et créez le chargeur de démarrage sur la partition EFI. Dans ce cas, je n'aurai pas de chargeur de démarrage indépendant (séparé). J'ai choisi la troisième option d'installation. Dans Windows 10 (que j'utilise actuellement), la version 1703 a introduit un utilitaire MBR2GPT, qui peut convertir les disques MBR en GPT. Vous ne pouvez convertir les disques durs qu'avec le système d'exploitation installé et le chargeur de démarrage sur ce disque. Windows 10 peut être converti en ligne et hors ligne. les fenêtres 7 et Win 8 ne peuvent être convertis que hors ligne. les fenêtres Le 8.1 que je vais installer sera hors ligne, ce qui me permettra de convertir le disque sans aucun problème MBR vers GPT.

Commençons par créer une section, attribuer une lettre et créer une étiquette.

Faites un clic droit sur l'espace non alloué et sélectionnez "Créer un volume simple".

Attribuez une lettre de lecteur (S :).

Attribuez le nom de volume - OS.

Nous devons maintenant rendre la partition active, mais nous n'avons pas pu le faire dans la gestion des disques.

Faisons cela sur la ligne de commande en utilisant diskpart.

Vous devez maintenant décompresser (déplier) l'archive du système d'exploitation située dans la distribution Windows dans le fichier install.wim(esd) sur la partition créée et créer un chargeur de démarrage. J'utilise généralement pour cela les utilitaires Windows dism et bcdboot, mais ces utilitaires n'ont pas d'interface graphique et afin de mieux montrer la séquence d'actions, j'utilise l'utilitaire WinNTSetup, qui possède une interface graphique. Tout d'abord, je monte l'ISO avec la distribution Windows 8.1 sur un lecteur virtuel (F :).

P. Après cela, je lance l'utilitaire WinNTSetup.

Dans la fenêtre qui apparaît, sélectionnez le chemin d'accès aux fichiers d'installation de Windows 8.1. Les fichiers d'installation sont l'archive OS Install.wim. Dans mon cas, install.wim se trouve dans le lecteur virtuel (F :) dans le dossier sources.

Par défaut, WinNTSetup pour le chargeur de démarrage sélectionne le disque local (volume, partition) avec le chargeur de démarrage du système en cours d'exécution, mais j'ai besoin du chargeur de démarrage sur un autre disque dur. Sur les disques MBR, le bootloader ne peut être créé que sur la partition active. J'ai rendu active l'étiquette de la section (S :) OS. Je choisis cette rubrique.

Je ne comprends pas pourquoi WinNTSetup n'aime pas la partition active.

Vous devez maintenant spécifier la partition dans laquelle le système d'exploitation sera installé. Dans mon cas, il s'agit de la section (S :).

Cliquez sur "Installer" et sélectionnez le chargeur de démarrage MBR (élément du BIOS).

Les fichiers commenceront à être décompressés et le chargeur de démarrage sera créé.

puis invité à redémarrer votre ordinateur pour poursuivre l'installation. Je ne souhaite pas poursuivre l'installation en mode Legacy et cliquez sur « Annuler ».

J'ai décidé de poursuivre l'installation en mode UEFI. Utilisation de l'utilitaire MBR2GPT Je vérifie si j'ai tout fait correctement. Équipe

mbr2gpt /disk:1 /validate /allowFullOS

Écrasement de l'enregistrement de démarrage principal ( Enregistrement de démarrage principal) permet non seulement de le restaurer (si nécessaire), mais aussi de s'en occuper.

Restauration (écrasement) du Master Boot Record ( Enregistrement de démarrage principal) en mode automatique

– installez le disque de démarrage dans le plateau du lecteur (ou );

- Cliquez sur Ctrl+Alt+Suppr;

Supprimer ouvrir une session Utilitaire de configuration CMOS;

– installer le démarrage à partir de CD/DVD ROM, presse F10, autorisez les modifications apportées, le redémarrage commencera ;

, appuyez sur une touche;

- dans la fenêtre Gestionnaire de démarrage de Windows sélectionner Configuration de Windows/Installation de Windows -> Cliquez sur Entrer;

NOUS), Cliquez sur Suivant;

il y en a 2 ou plus installés) ;

– régler l'interrupteur Utilisez des outils de récupération qui peuvent aider à résoudre les problèmes de démarrage de Windows -> Suivant;

– dans la fenêtre suivante – Options de récupération système (Options de récupération système) – options disponibles :

· Réparation de démarrage (Résoudre automatiquement les problèmes qui empêchent le démarrage de Windows);

· Restauration du système (Restaurer Windows à un moment antérieur);

· La récupération de l'image système (Récupérez votre ordinateur à l'aide d'une image système que vous avez créée précédemment);

· Diagnostique de la mémoire de Windows (Vérifiez votre ordinateur pour les erreurs matérielles de mémoire);

· Invite de commande (Ouvrir une fenêtre d'invite de commande);

- sélectionner Réparation de démarrage;

– outil de récupération de démarrage Réparation de démarrage diagnostiquera et résoudra les problèmes ;

– (si aucun problème n’est identifié, un message apparaîtra "Startup Repair n'a pas pu détecter un problème");

- Cliquez sur Terminer -> Redémarrer;

– lors du redémarrage, appuyez sur Supprimer ouvrir une session Utilitaire de configuration CMOS;

– installer le téléchargementdepuis votre disque dur, cliquez sur F10;

Restauration (écrasement) du Master Boot Record ( Enregistrement de démarrage principal) en utilisant

installez le disque de démarrage dans le plateau du lecteur (ou);

- Cliquez sur Ctrl+Alt+Suppr;

– lors du redémarrage, appuyez sur Supprimer ouvrir une session Utilitaire de configuration CMOS;

– installer le démarrage à partir de CD/DVD ROM, presse F10, autorisez les modifications apportées, le redémarrage commencera ;

– après le redémarrage, si le message apparaît "Appuyez sur n'importe quelle touche pour démarrer à partir d'un CD ou d'un DVD...", appuyez sur une touche;

- dans la fenêtre Gestionnaire de démarrage de Windows sélectionner Configuration de Windows/Installation de Windows -> Cliquez sur Entrer;

– lorsque le programme d'installation charge les fichiers d'installation dans la RAM, une fenêtre de sélection d'une disposition de clavier apparaîtra (vous pouvez sélectionner le russe, ou vous pouvez laisser NOUS), Cliquez sur Suivant;

– dans la fenêtre suivante, sélectionnez le système d'exploitation (si votreil y en a 2 ou plus installés) ;

– régler l'interrupteur Utilisez des outils de récupération qui peuvent aider à résoudre les problèmes de démarrage de Windows -> Suivant;

- dans la fenêtre Options de récupération système (Options de récupération système) sélectionner Invite de commande;

Dans cette section, je vais vous montrer comment écrire votre propre gestionnaire multiboot. Le gestionnaire multiboot est un code situé dans le secteur de démarrage qui, au choix de l'utilisateur, charge l'un des nombreux systèmes d'exploitation installés sur l'ordinateur. Au cours de la discussion, vous vous familiariserez avec l'interruption INT 13h, la table de partition, etc. Le chargeur de démarrage standard que la plupart des systèmes d'exploitation installent par défaut est trop primitif pour être pris au sérieux, et les chargeurs de démarrage personnalisés de développeurs tiers sont généralement trop maladroits et peu fiables. Alors écrivons le nôtre ! Pendant que nous l'écrivons, nous apprendrons à connaître le Tao et le Zen de l'assembleur, apprendrons à déboguer des programmes sans débogueur et examinerons de plus près les interfaces de bas niveau du disque dur.

Interface INT 13h

Vous pouvez gérer les disques à la fois via les ports d'E/S et via le BIOS. Les ports sont beaucoup plus puissants et intéressants, mais le BIOS est beaucoup plus facile à programmer et prend également en charge un grand nombre de disques de différentes tailles, en faisant abstraction des caractéristiques de conception de chaque modèle spécifique. Nous agirons donc à travers elle, ou plus précisément, à travers l'interface d'interruption INT 13h.

Le numéro de fonction est inscrit dans le registre AH. Dans le cas de la lecture, il est égal à deux. Le registre AL est responsable du nombre de secteurs en cours de traitement. Puisque nous allons lire un secteur par opération, nous en mettrons un ici. Le registre DH stocke le numéro de tête et le registre DL stocke le numéro de lecteur (80h est le premier disque dur, 81h est le deuxième, etc.). Les cinq bits de poids faible du registre CL spécifient le numéro de secteur, les bits restants du registre CL et les huit bits du registre CH spécifient le numéro du cylindre que nous voulons lire. La paire de registres ES:BX pointe vers l'adresse du tampon de destination. C'est tout, en fait. Après avoir exécuté la commande INT 13h, les données lues se retrouveront dans le tampon, et si une erreur se produit (par exemple, la tête « trébuche » sur le secteur MAUVAIS), le BIOS définira l'indicateur de report, et nous serons forcés pour réessayer ou afficher un message triste à l'écran.

Le code en langage assembleur de ce programme est présenté dans le listing 5.6.

Inscription 5.6. Code qui lit le secteur de démarrage ou la table de partition étendue

MOVSI, 1BEh ; Aller à la première section
MOUVEMENT AXE, CS ; Configuration d'ES
MOUVEMENT ES, AXE
MOV BX, buf ; Décalage du tampon
...
read_all_partitions :
MOV AX, bourgeon ; Lire 1 secteur du disque

MOV DH, ; Numéro de tête de départ
MOUVEMENT CX, ; Secteur de départ avec cylindre INT 13h
Erreur JC ; Erreur de lecture
;Traitement du secteur de démarrage en lecture ou de la table de partition étendue
;===================================================================
;
Octet CMP, 80h
JZ LOAD_BOOT ; C'est le secteur de démarrage
; Nous lui transférons le contrôle
Octet CMP, 05h
JZ LOAD_CHS_EXT ; Ceci est une table de partition étendue
; au format CHS
Octet CMP, 0Fh
JZ LOAD_LBA_EXT ; Ceci est une table de partition étendue
; au format LBA
AJOUTER SI, 10h ; Passons à la section suivante
CMP SI, 1EEh
JNA read_all_partitions ; Lisez toutes les sections une par une
...buf rb512 ; Tampon de 512 octets

L'écriture d'un secteur en mode CHS se déroule presque exactement de la même manière, seul le registre AH n'est pas 02h, mais 03h. Le mode LBA est beaucoup plus difficile à comprendre, mais nous, comme de vrais hackers, le maîtriserons certainement.

Le secteur est lu par la fonction 42h(AH = 42h). Le registre DL, comme précédemment, contient le numéro de lecteur, mais la paire de registres DS:SI pointe vers le paquet d'adresses de disque, qui est une structure avancée du format décrit dans le tableau. 5.4.

Tableau 5.4. Format de paquet d'adresse utilisé pour lire et écrire des secteurs en mode LBA

Biais Taper Description
00h OCTET Taille du forfait - 10h ou 18h
01h OCTET Le champ est réservé et doit être nul
02h MOT Combien de secteurs lire
04h DWORD Adresse du tampon de destination 32 bits au format seg:offs
08h QWORD Numéro de secteur de départ pour la lecture
10h QWORD L'adresse plate de 64 bits du tampon de destination. Utilisé uniquement si l'adresse 32 bits est FFFF:FFFF

Le code qui lit un secteur en mode LBA ressemble généralement à celui présenté dans le listing 5.7.

Inscription 5.7. Code qui lit un secteur sur un disque en mode LBA

MOV DI, 1BEh ; Aller à la première section
MOUVEMENT AXE, CS ; Mise en place...
MOV buf_seg ; ...segment
MOUVEMENT EAX, ; Décalage de partition par rapport à
; début de la section
AJOUTER EAX, EDI ; L'EDI doit contenir le numéro de secteur
; MBR actuel
MOUVEMENT ;
...
read_all_partitions :
MOVAN, 42h ; Lire le secteur en mode LBA
MOV DL, 80h ; Lire à partir du premier disque
MOV SI, dap ; Décalage du paquet d'adresse INT 13h
Erreur JC ; Erreur de lecture
...
dap :
packet_size base de données 10h ; taille du paquet 10h octets
DB réservé 00h ; "Stash" pour les futures extensions
N_SEC dw 01h ; Lecture d'un secteur
buf_seg dw 00h ; Le segment de tampon de destination sera saisi ici
buf_off dw buf ; Décalage du tampon de destination
X_SEC jj 0 ; Le numéro du secteur à lire sera saisi ici
jj 0 ; Queue vraiment inutilisée
; Adresse 64 bits
buf rb 512; Tampon de 512 octets

L'écriture est similaire à la lecture, seul le registre AH contient non pas 42h, mais 43h. Le registre AL détermine le mode : si le bit 0 est à 1, le BIOS n'écrit pas, mais l'émule. Le bit 2, lorsqu'il est activé, permet l'enregistrement des chèques. Si le registre AL est à 0, l'écriture normale par défaut est effectuée.

Maintenant que nous sommes familiarisés avec les interruptions de disque, passons à d'autres aspects de la programmation.

Création du code du chargeur de démarrage

Les chargeurs de démarrage sont mieux programmés à l’aide de FASM. Du point de vue de l'assembleur, le chargeur est un fichier binaire ordinaire dont la taille maximale autorisée est de 1BBh (443) octets. Un peu? Mais ne tirons pas de conclusions hâtives. Chaque partition commence toujours au début du cylindre, ce qui signifie qu'entre la fin du MBR et le début de la partition il y a au moins n secteurs libres, où n == secteurs par piste. Presque tous les disques durs modernes ont 64 secteurs par piste, ce qui nous donne : 443 + 63*512 == 32 699 octets soit environ 32 Ko. Oui, vous pouvez même intégrer une interface graphique avec une souris dans ce volume ! Cependant, nous ne le ferons pas. Les vrais hackers travaillent en mode texte avec la ligne de commande.

Comme déjà mentionné, le BIOS charge le MBR à l'adresse 7C00h, donc au début du code assembleur il devrait y avoir une directive ORG 7C00h, ainsi que USE16, car le chargeur de démarrage fonctionne en mode réel 16 bits. Plus tard, si vous le souhaitez, il pourra passer en mode protégé, mais cela se produira plus tard. N'entrons pas dans une telle jungle.

Après avoir détecté une partition de démarrage (et cela peut être détecté par l'indicateur 80h, situé à zéro du début de la partition), le bootloader doit lire le premier secteur de cette partition, en le plaçant en mémoire à l'adresse 0000:7C00h, soit est exactement au-dessus de son propre corps. Mais ce n'est plus bon ! Et afin de ne pas provoquer de crash du système, le chargeur de démarrage doit au préalable déplacer son corps vers une autre adresse, ce qui se fait généralement avec la commande MOVSB ​​​​​​. Vous pouvez copier vers n'importe quelle adresse mémoire - de 0080:0067h à 9FE00h. Il est préférable de ne pas toucher à la mémoire située en dessous de 0080:0067h, car les vecteurs d'interruption et les variables système du BIOS se trouvent ici et la zone de mappage ROM commence à partir de A000h et au-dessus, donc l'adresse maximale accessible est A000h - 200h (taille du secteur) = = 9FE00h.

N'oubliez pas qu'il ne faut jamais toucher au registre DL, car il contient le numéro du lecteur de démarrage. Certains chargeurs de démarrage contiennent un bug qui démarre toujours à partir du premier disque dur, et ce alors que le BIOS vous permet de modifier l'ordre de démarrage depuis plus de 10 ans, et donc n'importe quel disque peut être amorçable.

En vérité, FASM est le seul assembleur que je connaisse qui « digère » directement la commande d'appel longue distance JMP 0000:7C00h. Tous les autres assembleurs le font pervertir quelque chose comme ceci : PUSH offset_of_target/PUSH segment_of_target/RETF . Ici, nous poussons le segment et le décalage de l'adresse cible sur la pile et exécutons un RETF lointain qui nous amène à l'emplacement souhaité. Vous pouvez également utiliser du code auto-modifiable en assemblant la commande JMP FAR « manuellement », ou simplement en plaçant l'adresse cible dans le même segment que l'adresse source (par exemple, 0000:7C00h ? 0000:7E00h). Cependant, ces approches sont fastidieuses et fastidieuses.

En général, le squelette de notre chargeur ressemblera à celui présenté dans le listing 5.8.

Inscription 5.8. Squelette d'un simple chargeur de démarrage écrit en FASM

utiliser16
ORG 7C00h
CLD ; Copier de gauche à droite
; (adresses croissantes)
MOUVEMENT SI,7C00h ; D'où copier
MOUVEMENT DI,7E00h ; Où copier
MOUVEMENT CX,200h ; Longueur du secteur
REP MOVSB ; Copie
; // Sélectionnez la partition que nous voulons charger,
; // le lit en mémoire à l'adresse 0000:7C00h
; // (voir listings 5.7 et 5.6)
JMP0000:7C00h ; Transfert du contrôle au secteur de démarrage

Écrivez le chargeur de démarrage dans l'enregistrement de démarrage principal

Sous l'ancien MS-DOS, il était facile d'écrire votre chargeur de démarrage sur le MBR. Pour ce faire, il suffit de tirer l'interruption INT 13h, fonction 03h (écriture secteur). Mais sous Windows NT cette technique ne fonctionne plus et il faut recourir à la fonction CreateFile. Si au lieu du nom du fichier à ouvrir nous spécifions le nom du périphérique, par exemple .PHYSICALDRIVE0 (le premier disque physique), nous pouvons librement lire et écrire ses secteurs en appelant respectivement ReadFile et WriteFile. Dans ce cas, l'indicateur dwCreationDisposition doit être défini sur la valeur OPEN_EXISTING et l'indicateur dwShareMode sur la valeur FILE_SHARE_WRITE. Vous aurez également besoin des droits d'administrateur système, sinon rien ne fonctionnera.

Un exemple complet d'appel à CreateFile ressemble au listing 5.9.

Inscription 5.9. Ouverture d'un accès direct au disque dur sous Windows NT

XOR EAX,EAX
POUSSEZ EAX ; hFichierModèle
PUSH dword FILE_ATTRIBUTE_NORMAL ; dwFlagsAndAttributes
PUSH dword OPEN_EXISTING ; dwCréationDisposition
POUSSEZ EAX ; lpSecurityAttributes
PUSH dword FILE_SHARE_WRITE ; dwShareMode
PUSH dword (GENERIC_WRITE OU GENERIC_READ) ; dwDesiredAccess
POUSSER DEVICE_NAME ; Nom de l'appareil
APPEL CreateFile ; Ouverture de l'appareil
INC EAX
TESTEAX,EAX
Erreur JZ
DÉC EAX
...
DEVICE_NAME base de données ".PHYSICALDRIVE0",0
BUF RB 512 ; Tampon

Après avoir ouvert le disque physique et vérifié que cette opération a réussi, nous devons lire le secteur MBR d'origine dans le tampon, écraser les premiers octets de 1BBh, sans toucher en aucune façon à la table de partition et à la signature 55h AAh (nous ne voulons pas le disque pour arrêter de démarrer, non? ). Il ne reste plus qu'à écrire le code MBR mis à jour et à fermer le descripteur de périphérique. Après un redémarrage, toutes les modifications prendront effet.

Note

Certes, il est fort possible que les modifications que vous avez apportées ne songent même pas à entrer en vigueur. Le chargeur se venge brutalement des moindres erreurs de conception. Par conséquent, afin de ne pas perdre le contenu de vos partitions, mieux vaut d’abord s’entraîner sur VMWare ou tout autre émulateur PC.

Sous Windows 9 X Bien entendu, l’astuce CreateFile ne fonctionne pas. Mais là, vous pouvez utiliser la simulation d'interruption de DMPI ou utiliser le pilote ASPI. Les deux méthodes ont été décrites en détail dans mon livre « Techniques pour protéger les CD contre la copie ». Cependant, bien qu’il parle de CD et non de disques durs, les disques durs sont programmés de la même manière.

Avant d'écrire votre propre chargeur de démarrage, il est recommandé d'étudier les chargeurs de démarrage non standard existants. Tous les chargeurs de démarrage répertoriés ci-dessous sont distribués sous licence GPL ou BSD, c'est-à-dire sans restrictions.

Ge2000.asm est un virus furtif soigneusement commenté qui remplace le chargeur de démarrage du système par le sien. Bien qu’il s’agisse d’un virus, il n’est pas dangereux et peut être utilisé à des fins éducatives.

Mbr.asm est un chargeur de démarrage extrêmement simple mais entièrement fonctionnel prenant en charge les partitions de plus de 8 Go.

Bootasm est un excellent gestionnaire multiboot avec des commentaires détaillés, passe en mode protégé, peut démarrer à partir d'une disquette, d'un CD, d'un disque zip, d'un disque dur, etc. Il prend en charge les partitions de plus de 8 Go, affiche un indicateur de chargement et fait de nombreuses autres choses utiles qu'il ne serait pas inutile d'apprendre.

Débogage du code du chargeur de démarrage

Le débogage du code du chargeur de démarrage est incroyablement difficile. Le chargeur de démarrage prend le contrôle bien avant le démarrage du système d'exploitation, lorsqu'aucun débogueur n'est encore en cours d'exécution. Il y a quelques années, c'était un énorme problème, et lors du développement de chargeurs « sophistiqués », il fallait soit y intégrer un mini-débogueur intégré, soit rechercher les erreurs manuellement, en étudiant les listes avec un crayon à la main. Avec l’avènement des émulateurs, tout a changé. Exécutez simplement un émulateur comme BOCHS (Fig. 5.5) et vous pourrez déboguer le chargeur de démarrage comme n'importe quel autre programme !


Riz. 5.5. Apparition de l'émulateur BOCHS en cours de débogage du secteur de démarrage

La programmation du bootloader est l'un des rares domaines dans lesquels l'utilisation de l'assembleur est vraiment justifiée. Les langages de haut niveau sont trop abstraits du matériel pour cela. De plus, ils ne sont pas assez flexibles. C'est pourquoi les pirates adorent bricoler les chargeurs de démarrage, en ajoutant de nombreuses nouvelles fonctionnalités, notamment le démarrage automatique à partir de lecteurs de CD-ROM ou SCSI, un antivirus, une protection par mot de passe avec cryptage des données, etc. Il y a vraiment de la place pour se développer ici, et il y a de quoi montrer toutes vos capacités. Pour une lecture plus approfondie, je recommanderais quelques sources très intéressantes. Les voici:

? Enregistrements de démarrage MBR et OS- beaucoup de matériel intéressant sur le MBR (en anglais) : http://thestarman.narod.ru/asm/mbr/MBR_in_detail.htm;

? BOCHS- un excellent émulateur avec un débogueur intégré, qui simplifie grandement le processus de « mise en service » des secteurs de démarrage. Gratuit, distribué avec le code source : http://bochs.sourceforge.net;

? http://www.koders.com(Fig. 5.6) - un excellent moteur de recherche destiné à la recherche de codes sources : en utilisant le mot-clé MBR, il renvoie un grand nombre de chargeurs de démarrage pour tous les goûts ;


Riz. 5.6. Recherchez les sources du chargeur de démarrage MBR sur le site Web de Koders

? Liste des interruptions de Ralph Brown(Fig. 5.7) - la fameuse « Interrupt List » de Ralph Brown, décrivant toutes les interruptions, y compris celles non documentées (en anglais) : http://www.pobox.com/~ralf;


Riz. 5.7. Consultez la légendaire « Liste d'interruptions » de Ralph Brown

OpenBIOS est un projet « Open BIOS » distribué en code source. Aide à comprendre certains aspects non évidents du traitement du chargeur de démarrage du système : http://www.openbios.info/docs/index.html.