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

Assembleur Discussion :

Lancer un .EXE à partir d'un autre programme


Sujet :

Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Lancer un .EXE à partir d'un autre programme
    Salut!

    Je suis un petit nouveau sur ce grand site web donc je vais faire le gars qui ne connait pas les règles. Non, je blague. J'ai lu les règles... En passant, génial ce site web

    Donc, je suis actuellement dans la création d'un OS. Et s'il vous plait, ne donner pas de commentaires du genre :
    Tu n'a pas le niveau; t'es pas mature; t'es *on...
    Donc j'ai fait mon boot en ASM, je l'ai compiler avec NASM; et je l'ai ensuite débuger avec DEBUG de MS-DOS. Jusque là, pas de problême. Ni au démarrage de la disquette.

    Mais la question est la suivante :
    Comment lancer un programme .EXE écrit en C
    J'ai bien citer : [...écrit en C]. Mais cela n'a pas d'importance parce que le .EXE est au format binaire donc...

    Alors, je vous demande gentiment de m'aider à résoudre ce problème. Je vous en serait très reconnaissant.

    PS : J'ai 14 ans et je ne veut pas que vous me jugiez par mon age. S'il vous plait ...

    Un GRAND merci à vous!

  2. #2
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Bonjour et bienvenue sur developpez.com

    Le programme est écrit en C, il fournit un fichier exécutable, mais exécutable sur un OS particulier (DOS, Win16, Win32 etc ...).

    Exemple : si le programme C est compilé avec comme plate-forme destination MS-DOS, il fera appel à des interruptions DOS (int 21h), or si vous créez un OS, ça ne fonctionnera pas à moins de coder vous-même les fonctions de cette interruption.

    Je pense donc que la tâche sera rude, bon courage
    Avant de poster, merci de consulter les règles du forum

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Donc si je recode les interruptions, ça devrait fonctionner? Pour l'instant j'ai seulement mon Boot avec un message de bienvenu.

    Je suis donc rendu au interruptions du micro contrôleur PIC, etc...

    Donc je vais commencer par recoder le «printf» du C et après les conditions.

    Merci, mais j'aimerais savoir comment lancer un autres programme écrit en ASM et qui a la forme binaire.

    Merci A+

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    le problème de pouvoir lancer un exécutable Windows depuis son propre noyau est fortement lié au format des fichiers exécutables de cette plateforme. Ceux-ci sont bien plus que de simples fichiers ne contenant que du code exécutable.

    La majorité des exécutables de la plateforme Windows sont aujourd'hui au format Portable Executable (PE).
    Le système lorsqu'il lance un exécutable au format PE fait bien plus qu'exécuter la partie dévolue au code : mapping des sections en mémoire, résolution de la table d'import, application éventuelle des relocations, exécution des fonctions de callback du TLS, mapping des DLLs dans l'espace d'adressage, etc.

    Dans un premier temps, si tu souhaites rester "compatible" avec les formats de Windows, la prise en charge des fichiers .com - moins complexes que les exécutables au format PE - serait, je crois, un bon début. Ensuite tu peux toujours tenter les exécutables au format NE (New Executable, ancêtre du format PE).

    Sinon tu peux toi même créer une spécification pour ton propre format de fichier exécutable au risque de perdre la compatibilité avec les formats supportés par Windows (quitte à y revenir par la suite et faire un double chargeur qui prendrait ton format et ceux de windows).

    Quoi qu'il en soit, il faudra que tu t'intéresse aux différents formats de fichier exécutable sous Windows.

    Wotsit contient une très bonne base pour les formats de fichiers :

    http://www.wotsit.org/

    La spécification PE et COFF (Common Object File Format) est disponible sur le site de Microsoft :

    http://www.microsoft.com/whdc/system...re/PECOFF.mspx

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    En fait, il te risque de falloir programmer un éditeur de liens pour ton OS.

    Tu pourras encore certainement utilisé les compilateurs C (vers des fichiers objets), mais pour l'éditions des liens, il te faudra le faire, afin qu'il respecte les normes de ton système. (par exemple, pour la gestion des bibliothèques dynamiques, du MMU...)

    Donc je vais commencer par recoder le «printf» du C et après les conditions.
    Il te faudra avant coder les appels systèmes, tel write et read. Il y a également des fonctions à coder (par exemple pour le masquage des interruptions).

    Comment comptes-tu gérer le multi-processus ?
    Je ne répondrai à aucune question technique en privé

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par millie
    Comment comptes-tu gérer le multi-processus ?
    En faite j'en ai aucune idées

    Qu'est-ce que je devrait faire à votre avis?

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    C'est quelque chose d'extremement compliqué, très très critique à faire (comme tout noyau d'ailleurs). Il faut savoir bien dialoguer avec la MMU et créer un Scheduler (celui là ne s'occupe que d'élire le processus qui sera running). Et il faut évidement gérer tout ce qui est : liste des processus runnable, sleeping (par exemple, en endormissant les processus qui font des accès disque pour éviter de perdre trop de temps). En pensant tout le temps que la programmation de ceci est très complexe car il y a des sections de code critique partout.
    Il y a aussi tout ce qui est gestion du Buffer Cache pour les disques physiques (pour éviter de perdre trop de temps), les sections critiques sont également énormes là dedans.

    Je n'ose pas imaginer la galère que ce doit être pour programmer ça tellement la programmation de ce genre de chose est difficile (surtout car il y a des interruptions qui peuvent arriver à n'importe quel moment ou encore des transactions non finis (enfin, là, c'est une mauvaise transaction ) qui peuvent rendre non cohérent des structures internes au noyau)

    Tu peux jetter un oeil à tout ce qui est lié au processus dans les cours là :
    http://pellegrini.developpez.com/systemes-exploitation/
    http://billard.developpez.com/cours/systeme/
    Je ne répondrai à aucune question technique en privé

Discussions similaires

  1. Réponses: 14
    Dernier message: 15/04/2008, 16h39
  2. Lancer un exe à partir d'un autre exe.
    Par kanea_iza dans le forum Windows
    Réponses: 2
    Dernier message: 15/03/2007, 08h34
  3. lancer formulaire a partir d'un autre
    Par TheRealMike dans le forum IHM
    Réponses: 2
    Dernier message: 14/03/2007, 12h47
  4. Réponses: 12
    Dernier message: 06/06/2006, 18h22
  5. compilation d'un programme à partir d'un autre programme??
    Par Naruseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/08/2005, 15h05

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