OVH Cloud OVH Cloud

Code exécutable du MBR

13 réponses
Avatar
c-candide
Bonjour,

J'essaye de comprendre comment marche le MBR. Je ne vois pas comment la
fameuse commande
DOS
fdisk /mbr

peut restaurer le MBR suivant l'expression consacr=E9e ou plut=F4t le
code ex=E9cutable puisque la table des partitions elle est apr=E8s ce
code et n'est pas modifi=E9e. Cela voudrait dire qu'il existe en quelque
sorte un code "fig=E9" du code ex=E9cutable du MBR et que la commande
ci-dessus se contenterait juste de remplacer les 446 octets
ex=E9cutables par ce code en quelque sorte standard. Est-ce que c'est
=E7a ? Et si oui, que fait ce code standard ? Et c'est =E0 la place de
ce code que se place un boot loader, genre LILO ou autre ? Merci.

Candide

3 réponses

1 2
Avatar
Jean-Claude BELLAMY
Dans le message :44c7708b$0$665$,
Pascal Hambourg a pris la peine d'écrire ce
qui suit :
[...]
Mais je ne parlais pas du tout de ça mais de ce qui se passe quand il
y a dans le MBR deux (ou plus) partitions principales marquées
actives.
Rien de spécial.



Le code du MBR boote sur la première
OUI


ou se bloque parce que ça ne lui plaît pas qu'il y ait plusieurs
partitions actives ?
NON

J'ai déjà expérimenté.
NB: pour faire cette manip assez "spéciale", j'ai utilisé un éditeur de
disque (DISKEDIT, de Norton) sous DOS (disquette Win98)


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr

Avatar
Pascal Hambourg

ou se bloque parce que ça ne lui plaît pas qu'il y ait plusieurs
partitions actives ?


NON
J'ai déjà expérimenté.


Merci d'avoir dissipé mes doutes.


Avatar
Pascal Hambourg
[Jean-Claude, je t'envoie une copie de ma réponse par e-mail car le fil
est ancien et tu pourrais la manquer, alors que je pense qu'elle
t'intéressera.]

Dans le message :44c7708b$0$665$,
Pascal Hambourg a pris la peine d'écrire ce
qui suit :

[...]
Mais je ne parlais pas du tout de ça mais de ce qui se passe quand il
y a dans le MBR deux (ou plus) partitions principales marquées
actives.


Rien de spécial.

Le code du MBR boote sur la première


OUI

ou se bloque parce que ça ne lui plaît pas qu'il y ait plusieurs
partitions actives ?


NON
J'ai déjà expérimenté.
NB: pour faire cette manip assez "spéciale", j'ai utilisé un éditeur de
disque (DISKEDIT, de Norton) sous DOS (disquette Win98)


Or un contributeur de fr.comp.os.linux.configuration m'a répondu ceci
dans l'article <news:ejknbd$ali$ :

Il peut y avoir plusieurs partitions marquées actives, ça ne gêne pas.


Hum, d'accord si c'est sur plusieurs disques, mais surement pas sur un
seul disque avec le code de démarrage standard de DOS/Windows.


Non, sur le même disque, dans la même table de partition du même MBR.
Dans ce domaine, j'ai tendance à faire confiance à la personne qui me
l'a affirmé (JC Bellamy pour ceux qui connaissent).


He bien, cela devait pas être son jour, car voici le début du code
désassemblé d'un MBR issu d'un fdisk /mbr, celui issu d'un fixmbr
est légérement différent (emploi du registe BP au lieu de SI)

1000:7c00 33c0 xor ax, ax
1000:7c02 8ed0 mov ss, ax
1000:7c04 bc007c mov sp, 7c00h
1000:7c07 fb sti
1000:7c08 50 push ax
1000:7c09 07 pop es
1000:7c0a 50 push ax
1000:7c0b 1f pop ds
1000:7c0c fc cld
1000:7c0d be1b7c mov si, 7c1bh
1000:7c10 bf1b06 mov di, 61bh
1000:7c13 50 push ax
1000:7c14 57 push di
1000:7c15 b9e501 mov cx, 1e5h
1000:7c18 f3a4 rep movsb
1000:7c1a cb retf
1000:7c1b bebe07 mov si, 7beh
1000:7c1e b104 mov cl, 04h
Début de la boucle pour tester s'il existe une partition active
1000:7c20 382c cmp [si], ch
1000:7c22 7c09 jl loc_00007c2d
1000:7c24 7515 jnz loc_00007c3b
1000:7c26 83c610 add si, 10h
1000:7c29 e2f5 loop 7c20h
Fin de la boucle et reset s'il n'existe pas de partition active
1000:7c2b cd18 int 18h
1000:7c2d 8b14 mov dx, [si]
1000:7c2f 8bee mov bp, si
1000:7c31 83c610 add si, 10h
1000:7c34 49 dec cx
1000:7c35 7416 jz loc_00007c4d
1000:7c37 382c cmp [si], ch -> test du drapeau "active"
1000:7c39 74f6 jz 7c31h -> saute si drapeau à 0
Début pour afficher le message d'erreur "Table de partition erroné ..."
1000:7c3b be1007 mov si, 710h
1000:7c3e 4e dec si
1000:7c3f ac lodsb
1000:7c40 3c00 cmp al, 00h
1000:7c42 74fa jz 7c3eh
1000:7c44 bb0700 mov bx, 07h
1000:7c47 b40e mov ah, 0eh
1000:7c49 cd10 int 10h
1000:7c4b ebf2 jmp 7c3fh


Suite à cette réponse, voulant en avoir le coeur net, j'ai testé avec le
MBR installé par Windows XP. J'ai utilisé pour cela le fdisk de Linux
qui permet d'activer une partition sans désactiver la partition active
existante. Comme ce contributeur l'a dit, le boot se bloque avec un
message du genre "Table de partition invalide". Une chose me ressure
dans cette histoire, c'est que je n'avais pas rêvé. :-)




1 2