IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Programme asm x86 bootable sur SSD et HDD


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut Programme asm x86 bootable sur SSD et HDD
    Bonjour,

    Je cherche à créer un programme assembleur bootable sur un SSD et un HDD, comment procéder ?

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 824
    Points
    42 824
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup.

  4. #4
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    Re,

    une fois le programme écrit, comment l'installer sur le support ?

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Il te faut un outil qui te permette d'accéder et d'écrire directement sur les secteurs d'un support de stockage de masse (disquette, disque dur ou clé USB), faire en sorte que le fichier binaire fasse exactement 512 octets (taille d'un secteur sur PC), que cet exécutable soit conçu et compilé pour être chargé en 0000:7c00, parce que c'est à cet endroit précis en mémoire qu'il va l'être, et coller la signature 55aa dans les deux derniers octets du secteur, car c'est la signature qui permettra au PC de savoir qu'il y a bien quelque chose d'exploitable dans ce secteur (et qu'il peut donc se permettre de l'exécuter).

    Si tu utilises Linux, tu as un accès direct aux disques à travers les fichiers spéciaux « /dev/… », présentés de manière linéaire. Donc, pour écrire quelque chose directement dans le premier secteur d'un disque, il suffit de l'écrire dans les premiers octets de ce fichier. C'est extrêmement pratique.

    Donc un « cat tonfichier.bin > /dev/fd0 » te permet d'écrire cela sur disquette, par exemple.
    Et dans le même esprit :

    • /dev/sda, /dev/sdb, /dev/sdc… pour écrire sur les différents disques durs installés dans ta machine et par extension, aujourd'hui, les périphériques de stockage de masse dont les clés USB. La lettre associée va être fonction de ce qui est déjà monté au moment où tu la branches, donc c'est à toi de la déterminer ;
    • /dev/sda1, /dev/sda2, /dev/sda3, /dev/sda4… pour aller écrire sur les partitions d'un disque dur en particulier (en remplaçant bien sûr le préfixe sda par sdb, sdc, sdd…), ce qui est plus indiqué si tu souhaites installer un OS professionnel sur les machines d'un client.


    ATTENTION à ne pas dépasser la taille nécessaire, sous peine d'écraser le reste du disque !
    ATTENTION à ne pas non plus écraser la table des partitions du volume que tu utilises. Sur PC, les quatre partitions primaires sont également définies dans le MBR (le tout premier secteur du disque, celui que tu vas utiliser) à l'aide d'enregistrements de 16 octets chacun. Si ces partitions sont importantes, il faudra utiliser un fichier binaire de 512-(4×16)-2 = 446 octets maximum, et se débrouiller pour aller mettre la signature 55aa à la fin quand même, mais il y a des chances qu'elle y soit déjà.

  6. #6
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup.

    et pour Windows (7), y a t'il un logiciel installé par défaut pour écrire directement à un endroit précis sur un disque dur ? Sinon lequel me conseillez-vous ?

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 824
    Points
    42 824
    Par défaut
    Tu as Winhex. pour ne citer que lui. Il est payant, mais tu peux l'évaluer.

    Je cites celui-ci car pour l'avoir utilisé, je sais qu'il peut écrire sur les secteurs du disque avec les droits admin.

    Il doit y en voir d'autres mais que je ne connais pas.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  8. #8
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    J'ai placé mon programme assembleur à l'aide du logiciel EditHexa dans le secteur 0 de mon disque dur. Je redémarre mon pc et là je ne trouve pas mon disque dur donc non reconnu par le bios. Je repars sur le logiciel EditHexa au secteur 0 du disque dur en question et là je m'aperçois que le secteur 0 s'est vidé de ce que j'y avait mis et EditHexa me donne ce message d'erreur lorsque je tente d'éditer ce disque dur :

    Le programme ne traitera pas ce support. La prise en charge en mode RAW (2352 octets par secteur) n'est pas encore implantée.

    Voici le code que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    BITS 16
    ORG 0x7C00
     
    MOV SI, HelloString
    CALL PrintString
    JMP $
     
     
    PrintCharacter:
     
    MOV AH, 0x0E
    MOV BH, 0x00
    MOV BL, 0x07
     
    INT 0x10
    RET
     
     
     
    PrintString:
    next_character:
    MOV AL, [SI]
    INC SI
    OR AL, AL
    JZ exit_function
    CALL PrintCharacter
    JMP next_character
    exit_function:
    RET
     
     
    HelloString db 'Hello World', 0
     
    TIMES 510 - ($ - $$) db 0
    DW 0xAA55
    Et voici comment se présente le secteur 0 rempli avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BE 1E 7C E8 0B 00 EB FE B4 0E B7 00 B3 07 CD 10 C3 8A 04 46 08 C0 74 05 E8 ED FF EB F4 C3 48 65 6C 6C 6F 20 57 6F 72 6C 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
    Quelqu'un peut m'aider ?

  9. #9
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    le contenu de ton secteur correspond bien à ton code
    l'erreur vient du fait que tu utilises un disque en mode RAW 2352 octets/secteur
    ton code est du 16 bits pour un disque en 512 octets/secteur

  10. #10
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    Une manière de régler le problème serait de remplacer le times 510 par un times 2350 ? Mais si je veux rester sur des secteurs de 512 comment faire ?

  11. #11
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    non, la bonne manière c'est de partitionner et reformater ton disque

  12. #12
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    Une fois cela fait ?

  13. #13
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    bien écrire le nouveau secteur de boot dessus

  14. #14
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    attention il faut ecrire le code de boot dans le secteur de boot (ou MBR pour Master Boot Record) sans effacer la table de partiton! (qui se trouve aussi dans le MBR)

  15. #15
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Alors oui et non...
    Le principe des partitions n'est pas une obligation physique pour un disque.
    Si son disque dur doit être utilisé avec un autre système que le sien, ou juste parce que c'est une gros disque qu'il ne veut pas utiliser en entier,
    effectivement, il vaut mieux laisser le MBR tranquille et modifier le secteur de BOOT de la partition, encore faut-il le trouver,
    et être sûr de ce que l'on fait...

    à mon sens, il vaut mieux que Factorisable utilise une petite clé USB pour faire ses essais plutôt qu'un disque-dur, en plus ça lui permettra
    de tester le code sur plusieurs plateformes.

  16. #16
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    J'ai formaté en NTFS le disque dur, remis le programme au secteur 0, ça me fait comme dans mon premier message, je parle bien du secteur 0 le tout premier du disque dur, cela devrait-il fonctionner ? Je préfère faire cela sur disque dur.

  17. #17
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    NTFS c'est un système de fichiers, que ton disque soit formaté en FAT16 FAT32, NTFS ou EXT4 ou autre ne changera pas le fait que ton disque possède des secteurs de 512 octets
    Si ça ne fonctionne pas, c'est qu'il y a une erreur lors de l'écriture sur le disque, donc ou bien ton logiciel foire le truc (bug ou erreur de config), ou c'est une erreur de manipulation

  18. #18
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    Le code écrit sur le disque dur j'ai la possibilité de le voir et sur le programme d'édition de secteur et sur un autre programme qui me permet de visualiser ce qui se trouve sur le HDD, donc c'est peu probable qu'il y ait une erreur d'écriture. Pour l'erreur de manipulation trois essais non concluants l'écarte aussi. Si quelqu'un pouvait tester mon code avec les mêmes paramètres décrits pour tenter de cerner le problème...

  19. #19
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Si tu réécris 512 octets sur le secteur 0 du disque dur, tu détruis donc la table des partitions (vu que celle-ci se trouve à l'octet 446 soit 0x1BE, merci Wikipédia).

    Pour écrire le MBR, il ne faut donc réécrire que les 446 premiers octets (0 à 0x1BD) afin de sauvegarder ta table de partitions (et la partition NTFS derrière), sauf si l'envie te prend d'écrire ta propre table de partitions .
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  20. #20
    Provisoirement toléré
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 120
    Points : 0
    Points
    0
    Par défaut
    Plus haut on me dit que la table de partition n'est pas obligatoire, il faudrait savoir. Si elle est indispensable pour que ça boot, comment en créer une, avez-vous un lien tuto ? Enfin le problème ne pourrait-il pas venir d'un mauvais paramétrage du bios ? Comment y remédier si tel est le cas ?

    En fait c'est un uefi que j'ai, cela change t'il quelque chose ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Disque Dur] Dual boot Windows 7 & Linux sur SSD & HDD
    Par Vespiras dans le forum Composants
    Réponses: 5
    Dernier message: 15/05/2014, 12h24
  2. Programmation d'un menu sur clé bootable
    Par The Jos dans le forum Windows
    Réponses: 3
    Dernier message: 18/11/2011, 22h54
  3. Programme ASM compilé en .EXE pour amorcer sur HDD
    Par SebioHazard dans le forum x86 16-bits
    Réponses: 30
    Dernier message: 21/01/2008, 01h30
  4. [Programmation distribuée] Votre avis sur une archi
    Par Acarp47 dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 7
    Dernier message: 29/06/2005, 15h01
  5. [Applet][Exec programme] Est ce possible sur un serveur ?
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 31
    Dernier message: 11/05/2004, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo