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

C Discussion :

Executer du code C à partir d'une string.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut Executer du code C à partir d'une string.
    Salut je suis nouveau sur le forum, et je me pose la question suivante :

    j'aimerais extraire une instruction situé dans une string et l'executer dans mon programme comme une instruction normalle.

    j'ai déjà posé cette question et j'ai eu la réponse suivante :

    Je dois employer des structures contenant mes commandes en assembleur.

    La seconde question que je me pose est pourquoi je pouvais faire ca lorsque je programmais sous ma Ti89 ? ( cpu motorolla 68000 ) en C avec une commande qui devait etre un operateur. je ne suis plus très sur si c'était l'étoile ou les crochets mais je suis sur de l'avoir fait et j'avoue que ca marchais très bien.

    Malheuresement cette fonction m'est presque indispensable, et je suis un total noob en assemlbeur.

    Si ca n'est pas possible comme sur TI89 merci de m'expliquer comment c'ést possible sous TI89 et pourquoi ca n'est pas possible sur PC.

    Et des astuces pour pas trop souffrir de l'asm si ca n'est vraiment pas possible seraient le bienvenues.

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par barbare128
    Si ca n'est pas possible comme sur TI89 merci de m'expliquer comment c'ést possible sous TI89 et pourquoi ca n'est pas possible sur PC.
    Parce que sur TI89 tu n'utilisais pas le même compilateur. Avec un peu de bol, c'était même un interpréteur (ce qui expliquerait comment ça pouvait être possible).

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par Eusebius
    Parce que sur TI89 tu n'utilisais pas le même compilateur. Avec un peu de bol, c'était même un interpréteur (ce qui expliquerait comment ça pouvait être possible).
    Sur TI-89, je vois deux choses qui peuvent répondre à ce critère, mais la plus probable n'est pas directement reproductible en C:
    1. La fonction expr() de l'interpréteur BASIC, qui rappelle l'interpréteur BASIC sur la chaîne passée en paramètre. Pas d'équivalent direct en C, le plus proche serait un appel au shell UNIX par la fonction system().
    2. La commande Exec de l'interpréteur BASIC, qui convertit une chaîne de caractères hexadécimaux en du code binaire avant d'exécuter ledit code. Très facile à reproduire en C, mais spécifique au processeur, et pratiquement inutilisable sur une architecture complexe comme un ordinateur (et pas portable, bien sûr).


    Bref, le seul moyen en C est de refaire son propre interpréteur, voire un compilateur JIT (just-in-time) (ou bien, avoir le compilo déjà installé, et l'appeler en JIT).
    Par exemple, on peut générer un fichier source C, appeler le compilo dessus, puis le linker pour en faire une bibliothèque à liaison dynamique, puis la charger dynamiquement pendant l'exécution (il y a des fonctions pour cela sous Windows et sous Linux, mais ce ne sont pas les mêmes, ni le même format de bibliothèque (.dll pour windows, .so pour linux)).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par barbare128
    Malheuresement cette fonction m'est presque indispensable, et je suis un total noob en assemlbeur.
    Pourquoi ? Tu veux faire quoi exactement ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    j'aimerais faire exactement la meme chose. récuperer un instruction et l'executér.

    je pourrais utuliser un switch mais cela limiterai beaucoup trop mon programme et c'est contre mon cahier des charges.

    L'assembleur, le problème c'est que ce genre de chose pourrais devenir une faille aux virus .... :/

    Il faut que je retrouve ce compilateur pour avoir plus d'infos. je comprends pas comment une instruction aussi pratique n'est pas disponnible :/ dmg

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par barbare128
    j'aimerais faire exactement la meme chose. récuperer un instruction et l'executér.
    Quelle instruction par exemple ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Quelle instruction par exemple ?

    le probleme c'est que c'est une table d'instruction que je charge au démarage et avec des numero. j'appele les fonctions par leur numero.

    le probleme c'est que ma table d'instruction est situé dans le début de mes fichier data. ( vu que c'est jamais le meme fichier et la meme table je suis obligé de récuperer les instructions en string. )

    midinoc > l'histoire de la librairie dynamique me plait pas mal mais cela doit demander beaucoup de prog ... ?

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par barbare128
    le probleme c'est que ma table d'instruction est situé dans le début de mes fichier data. ( vu que c'est jamais le meme fichier et la meme table je suis obligé de récuperer les instructions en string. )
    Je ne comprends pas...
    Tu peux préciser ?

    Et ton programme, qu'est-ce exactement ? Que fait-il, à quoi sert-il ?


    PS: Pour la bibliothèque, il faut pouvoir générer du code compilable puis exécuter le compilateur à supposer qu'il soit installé.
    Bref, c'est amusant à faire chez soi, une expérience intéressante, mais pas forcément envisageable pour un programme à distribuer...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    mat.M
    Invité(e)
    Par défaut
    Je crois que personne n'a compris ce que veut barbare128.
    Sur TI 89 le langage C est interpreté et tu dois pouvoir mixer des instructions C dans ton propre programme, "exécuter" des chaines de caracteres qui contiennent des instructions C
    En langage C ce n'est pas possible c'est compilé, il faut encapsuler ton propre interpréteur ou compilateur d'expressions régulières ou non.
    Ce qui est assez ardu à faire.
    Sinon oui il y a la fonction exec().
    Regarder autour de Seer , c'est une sorte de language C "embedded"

  10. #10
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par barbare128
    je ne suis plus très sur si c'était l'étoile ou les crochets mais je suis sur de l'avoir fait et j'avoue que ca marchais très bien.
    C'est ce que l'on appelle des "tokens" ou caractêres nécessaires à l'nterprétation d'un code source.
    Voir avec Lexx et Yacc mais c'est pas trop destiné aux microcontroleurs

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/01/2006, 16h26
  2. Réponses: 4
    Dernier message: 07/01/2006, 18h36
  3. Récupérer des floats à partir d'une string
    Par hamster dans le forum SL & STL
    Réponses: 8
    Dernier message: 09/06/2005, 08h10
  4. [DOM] Comment creer un DOM à partir d une String
    Par RolandB dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 24/04/2005, 18h11
  5. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10

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