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

Bibliothèques, systèmes et outils C Discussion :

Programme bootable + fonctionnement de l'exécution


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Programme bootable + fonctionnement de l'exécution
    Bonjour,
    Je souhaiterais savoir comment réaliser un programme bootable sans système d'exploitation (à partir d'un cd par exemple), et essayer d’exécuter un petit code simple en C (printf, sscanf, etc..). Quelle est la méthode ? avez vous des tutoriaux ? Comment les programmes fonctionnent-ils lorsqu'il n'y a pas de système d'exploitation ?

    Je ne m'y connais pas très bien, mais le code assembleur x86 est le même quelque soit le système d'exploitation, donc si j'utilise uniquement des librairies statiques intégrées à mon programme est il possible de créer un programme qui fonctionnerait à la fois sous Windows, sous Linux et sans système d'exploitation ?

    Quelle est la différence entre l’exécution d'un programme Linux et Windows ? Je crois savoir que Windows utilise le systeme d’exécutable "Portable Executable" et linux le système "ELF: Executable and Linkable Format" à quoi servent ces formats exactement, quelle est la différence au niveau de l’exécution du code assembleur par la machine ?

    Je ne sais pas si j'ai été très clair, mais c'est un sujet que je trouve intéressant, j'aurais aimé connaitre comment fonctionne l’exécution d'un programme par le système d'exploitation.

    Merci, =D
    Pierre.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Bonsoir,

    Citation Envoyé par Heudebert Voir le message
    Bonjour,
    Je souhaiterais savoir comment réaliser un programme bootable sans système d'exploitation (à partir d'un cd par exemple), et essayer d’exécuter un petit code simple en C (printf, sscanf, etc..). Quelle est la méthode ? avez vous des tutoriaux ?
    Avant tout, je t'indique qu'il existe le forum Assembleur : http://www.developpez.net/forums/f20...es/assembleur/ et en particulier le sous-forum « programmation d'OS », dans lesquels ces questions ont souvent été traitées. Tu y retrouveras probablement toutes les informations que tu cherches.

    Pour faire un programme bootable, mieux vaut utiliser une disquette ou une clé USB qu'un CD, car le système d'amorçage n'est pas le même.

    Il est naturellement possible de faire cela en C mais au moment où il va être lancé, tu ne vas disposer, par définition, d'aucune fonction de la bibliothèque standard. Comme en plus, ton programme sera probablement trop gros pour tenir dans le MBR, il te faudra écrire en plus un loader. Sur PC en particulier, il est plus simple d'écrire trois lignes d'assembleur et d'utiliser la fonction BIOS 10h pour écrire facilement une chaîne de caractères à l'écran (comme c'est une fonction du BIOS, elle est en ROM et est donc disponible dès le démarrage). Avec les PC récents, en revanche, il faut utiliser l'UEFI et l'interface n'est pas la même.

    Comment les programmes fonctionnent-ils lorsqu'il n'y a pas de système d'exploitation ?
    À part cela, le système d'exploitation est un logiciel exécutable au même titre que les autres (et aujourd'hui, surtout, un ensemble de logiciels). Son but est principalement d'offrir les infrastructures globales nécessaires pour éviter aux développeurs de réinventer la roue chaque fois qu'ils écrivent un nouveau programme.

    Je ne m'y connais pas très bien, mais le code assembleur x86 est le même quelque soit le système d'exploitation, donc si j'utilise uniquement des librairies statiques intégrées à mon programme est il possible de créer un programme qui fonctionnerait à la fois sous Windows, sous Linux et sans système d'exploitation ?
    Dans l'absolu, oui. Mais ça signifie également que si ces bibliothèques statiques s'appuient elles-mêmes sur d'autres bibliothèques, alors celles-ci doivent être statiques également et, au final, les dernières de la chaîne doivent effectuer tout le travail seul. Une autre manière de voir cela est de montrer que c'est théoriquement possible mais qu'à la compilation et à l'édition des liens, tu te retrouverais en fait à intégrer le système d'exploitation entier dans ton programme.

    Quelle est la différence entre l’exécution d'un programme Linux et Windows ? Je crois savoir que Windows utilise le systeme d’exécutable "Portable Executable" et linux le système "ELF: Executable and Linkable Format" à quoi servent ces formats exactement, quelle est la différence au niveau de l’exécution du code assembleur par la machine ?
    Chacun de ces formats est une implémentation propre au système d'exploitation qui l'utilise, même s'ils sont similaires entre eux parce que les problématiques sont toujours les mêmes en fin de compte. Même si le code en langage machine est prévu pour le même micro-processeur, le programme est quand même fait pour dialoguer principalement avec le système d'exploitation qui le lance, ce qui le rend par définition incompatible avec d'autres systèmes. Toutefois, le projet wine sous Linux, qu'on ne présente plus, sert justement à cela : lancer directement le contenu d'un exécutable Windows en mappant directement ou presque les appels qu'il invoque vers les équivalents Linux quand il existe.

    Ça marche plutôt pas mal, spécialement avec les logiciels qui s'appuient principalement sur des bibliothèques tierces, par exemple OpenGL. Cela dit, maintenir à jour un tel projet implique de maîtriser à la perfection les deux systèmes et et d'y ré-implémenter en permanence tout ce qui est ajouté à l'un ou à l'autre des O.S. En outre, le code machine propre au logiciel et les appels qu'il passe au système ou à ses bibliothèques n'est pas tout non plus : il se crée également un contexte, les données-objets qui répondent à des modèles bien précis doivent être gérés, etc.

    Enfin, les OS comme leurs logiciels dépendent eux-mêmes de certaines ressources et/ou autres processus qui doivent exister conjointement. L'exemple-type est la base de registre. Elle n'existe pas sous Linux, mais fait partie intégrante de l'environnement Windows depuis Windows 95. Ça veut dire qu'il faudra la mettre en place également si tu veux faire fonctionner un « exo-programme » sur une plateforme qui n'est pas prévue pour.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 723
    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 723
    Points : 43 827
    Points
    43 827
    Par défaut
    Je crois savoir que Windows utilise le systeme d’exécutable "Portable Executable" et linux le système "ELF: Executable and Linkable Format" à quoi servent ces formats exactement, quelle est la différence au niveau de l’exécution du code assembleur par la machine ?
    Je dirais que PE c'est de l"allemand, et ELF de l'anglais, tu peux exprimer la même chose avec les 2 langues mais tu dois utiliser l'allemand pour parler à un allemand et l'Anglais pour parler à un Anglais. Les deux formats servent à stocker le code des applications, les bibliothèques devant être chargé (dll pour Windows, .so pour Linux), la relocation en mémoire.

    Sans système d'exploitation, pas de bibliothèques, donc pas de printf, scanf, etc.. Il te faut coder toi-même ces fonctions, pas non plus d'accès au fileystem.

    Tu peux faire un programme fonctionnant sous windows, Linux, en langage C, par contre il te faudra le compiler sous chaque plateforme et n'utiliser que les fonctions de la libc. Tu as aussi Qt qui permet d'avoir énormément de fonctionnalités, (interface graphique, xml, bases de données, et j'en passes), pour être compatible, tu ne peux pas utiliser les fonctions liés à l'OS, avec l'exemple de Qt, c'est le Framework qui va utiliser les fonctions adaptés de Windows sous Windows, de X11 sous Linux, etc...

    Sans OS, pas de drivers, tu dois donc savoir comment piloter l’électronique des périphériques.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/01/2007, 14h20
  2. Programme VB6 fonctionne en XP SP1, mais pas en SP2
    Par domb_st dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 11/08/2006, 21h16
  3. Programme ne fonctionnant que sur certaines machines
    Par Marekh dans le forum DirectX
    Réponses: 14
    Dernier message: 30/08/2005, 14h09
  4. Réponses: 3
    Dernier message: 16/03/2005, 11h31

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