Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 32-bits / 64-bits
x86 32-bits / 64-bits Architectures x86 32/64 bits et leurs outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/11/2012, 18h42   #1
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
Par défaut Test d'un bootloader

bonjour, je ne sais pas si je suis sur le bon forum mais vue que le sujet traite un bootloader en assembleur j'ai décidé de poster le message ici.

Alors voila, je me suis tapé pas mal de lecture sur le fonctionnement d'un bootloader, CPU, Bios.

Je ne connait pas beaucoup l'assembleur avec NASM j'ai donc suivi un tuto pour créer un simple bootloader et de le faire démarrer au démarrage du PC.
http://a.michelizza.free.fr/pmwiki.p...utoOS.Bootsect

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[BITS 16]  ; indique a nasm que l'on travaille en 16 bits
[ORG 0x0]
 
; initialisation des segments en 0x07C00
    mov ax, 0x07C0
    mov ds, ax
    mov es, ax
    mov ax, 0x8000
    mov ss, ax
    mov sp, 0xf000    ; stack de 0x8F000 -> 0x80000
 
; affiche un msg
    mov si, msgDebut
    call afficher
 
 
end:
    jmp end
 
 
;--- Variables ---
    msgDebut db "Hello world !", 13, 10, 0
;-----------------
 
;---------------------------------------------------------
; Synopsis: Affiche une chaine de caracteres se terminant par 0x0
; Entree:   DS:SI -> pointe sur la chaine a afficher
;---------------------------------------------------------
afficher:
    push ax
    push bx
.debut:
    lodsb         ; ds:si -> al
    cmp al, 0     ; fin chaine ?
    jz .fin
    mov ah, 0x0E  ; appel au service 0x0e, int 0x10 du bios
    mov bx, 0x07  ; bx -> attribut, al -> caractere ascii
    int 0x10
    jmp .debut
 
.fin:
    pop bx
    pop ax
    ret
 
;--- NOP jusqu'a 510 ---
    times 510-($-$$) db 144
    dw 0xAA55
J'ai donc copié la source que j'ai enregistré en .asm et que j'ai ensuite compilé avec nasm en utilisant la commande suivante comme expliqué sur le tuto :
nasm -f bin -o bootsect bootsect.asm

Puis, pour tester, j'ai installé l'émulateur bochs (version installable pour windows). Voici comment je procède pour tester le bootloader :

J'ouvre bochs, dans la fenêtre "bochs start menu" je double clique sur l'onglet "disk & boot" et je sélectionne un floppy 3.5" 1.44M et je sélectionne le bootloader préalablement compilé. Je clique sur start et j'ai l'erreur suivante :

No bootable device.

si une personne à une idée du problème, merci d'avance.
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 20h16   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 095
Points : 11 095
C'est curieux. Ça devrait fonctionner.

Si tu as un éditeur hexadécimal à portée de main, pourrais-tu nous montrer le contenu du fichier généré ?
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 21h25   #3
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
Merci pour ta réponse, voila le résultat avec un éditeur hexadécimal




J'ai aussi testé de mettre le bootloader compilé sur clef USB pour tester directement au démarrage du PC et pareil, le bios ne boot pas sur le fichier et lance par la suite Windows.
Images attachées
Type de fichier : png hexa.png (123,9 Ko, 19 affichages)
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 01h28   #4
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 095
Points : 11 095
Bon. J'ai fait le test sous Linux avec le même programme et cela fonctionne… à condition de bien passer tous les paramètres ! Voici un tutoriel pas à pas sur Developpez qui traite du même sujet et utilise le même émulateur : http://tothpaul.developpez.com/boot/

Ça fonctionne à condition de passer le bon fichier, et de choisir le bon format pour la disquette ET pour le lecteur (1,44M pour tous les deux). Et bien sûr, il faut aussi cocher « inserted » pour lui dire que la disquette est bien dans le lecteur.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 02h10   #5
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
Merci, j'oublié de sélectionné un "type of média" sur bochs maintenant sa fonctionne.

Par contre, j'ai inséré le bootloader dans une clef usb préalablement formaté avec une partition primaire en fat32 et en sélectionnant la clef USB au bios le fichier ne boot pas donc windows prend le relais.

tu as une idée d'ou viens le problème ? Merci.
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 02h27   #6
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 095
Points : 11 095
Citation:
Envoyé par Guyome41 Voir le message
Par contre, j'ai inséré le bootloader dans une clef usb préalablement formaté avec une partition primaire en fat32 et en sélectionnant la clef USB au bios le fichier ne boot pas donc windows prend le relais.

tu as une idée d'ou viens le problème ? Merci.
Tu l'as inséré comment ? Tu as bien mis le contenu du fichier sur le MBR de ta clé ou tu l'as déposé comme un simple fichier sur la partition en FAT32 ?

Dans le premier cas, les options de ton BIOS sont elles correctes ? (est-il configuré pour démarrer sur une clé ?)
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 04h48   #7
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
Nan je l'ai déposé comme un simple fichier. Comment fait t'on pour le mettre dans le MBR ?

Sinon niveau bios j'ai pas de souci avec des clefs usb linux.
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 11h28   #8
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 095
Points : 11 095
Citation:
Envoyé par Guyome41 Voir le message
Nan je l'ai déposé comme un simple fichier.
Si tu as fait cela, ça veut dire que tu n'as pas compris comment fonctionne un bootloader, ni à quoi il sert. Sais-tu bien comment fonctionne une disquette, un disque dur et un système de fichiers globalement ?

Citation:
Comment fait t'on pour le mettre dans le MBR ?
Sous Windows, tu auras besoin d'un utilitaire pour le faire. Sous Linux (surtout si tu disposes déjà de clés démarrant un système en live), tu peux le faire en une ligne de shell très simple (« cat tonfichier vers tondisque ») mais à condition d'être prudent car, si tu te trompes, tu peux effacer tes données.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h48.


 
 
 
 
Partenaires

Hébergement Web