Apportez votre aide…
Ceci est une ancienne révision du document !
.
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.
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.
Avant tout il faudra vérifier que la table des partitions est conforme - à défaut un message d'erreur sera affiché.
Pré-requis
- Disposer des droits d'administration
- Connaitre la numération hexadécimale.
- Connaitre le langage assembleur
- Avoir installé un assembleur/désassembleur comme le paquet nasm
Que se passe-t-il au démarrage d'un PC ?
Lors de la mise sous tension, différentes routines se mettent en place ; la première consiste à attendre que la tension de l'alimentation soit stabilisée puis des tests processeur, carte mère, barrettes de mémoire sont effectués. Ceci correspond à la séquence POST.
Vient ensuite la recherche de périphériques de démarrage selon l'ordre de boot.
Le bios charge alors le premier secteur du disque (512 octets) en mémoire vive à l'adresse 0000:7C00
Ce type d'adressage correspond au mode réel de fonctionnement d'un PC, c'est un fonctionnement en mode 16 bits.
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
Comment accéder à ces informations
Nous avons vu comment afficher le contenu du mbr ; ici il faudra effectuer deux opérations :
- effectuer une copie de la partie exécutable du mbr (les 440 premiers octets) sous la forme d'un fichier
- utiliser un désassembleur pour afficher les instructions sous une forme lisibles par un humain (c'est tout relatif - à moins que je ne sois pas humain) au lieu de valeurs hexadécimales (opcodes)
Pour la première opération, on rentrera dans un terminal
sudo dd if=/dev/sda of=~/mbr_exec.bs bs=1 count=440
La deuxième opération transforme le fichier d'instruction hexadécimales en adresses, opcodes, instructions
ndisasm -b16 ~/mbr_exec.bs > ~/mbr_exec.asm
ndisasm est le désassembleur du paquet nasm, -b16 indique que le code doit être considéré comme de l'assembleur 16 bits.
Le résultat est écrit dans le fichier ~/mbr_exec.asm
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 que le code n'est plus utilisé.
Voir aussi
- http://forum.ubuntu-fr.org/viewtopic.php?id=390336 sur le forum ubuntu-fr
Contributeurs principaux : Nasman.