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 une chaine binaire executable


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut executer une chaine binaire executable
    salut à tous

    ici ==> total noob en c++

    je sais le titre est un peu confus.

    dans mon projet j'ai une variable qui contient du code binaire executable

    code = "contenu de calc.exe";

    le c++ aurait-il une fonction exec(code) qui me permettrait de lancer le code en mémoire comme si j'avais fait un double click sur calc.exe ?

    rogerio

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu écris tout ça dans un fichier (voir FAQ) et tu l'exécutes (voir FAQ).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut lol
    merci laurent

    je me doute que c'est plus simle, encore que je ne sais pas encore le faire

    mais ce que je voudrait c'est ne pas ecrire le fichier, seulement executer le code

    rogerio

  4. #4
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Quand tu lances un exe, Windows fait des initialisations pour lui. Il résout aussi certaines adresse dans l'exe, et lui donne le contrôle.

    Donc à moins que tu ais les capacitées pour faire pareil, ce ne sera pas possible.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut dur
    @Mayti4
    c'est clair que ça ne doit pas etre très simple

    mais j'ai vu que l'on pouvait récupérer l'adresse mémoire des éléments qui constituent la chaine à executer, il est théoriquement possible de faire executer la chaine

    en fait je n'ai pas besoin de solution mâchée, un lien vers un article ou un tuto devrait suffire

    merci

    rogerio

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Eh bien l'écriture suivante est valide en C/C++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char *s = "blablabla";
    void (*MaFonction)() =  reinterpret_cast<void (*)()>(s);
    // Appel de fonction
    (*MaFonction)();
    La seule difficulté est que lors d'un appel de fonction le compilateur injecte du code pour toi pour passer et récupérer les arguments, positionner la pile, etc. Donc, comme pour un exe, à moins que tu n'écrives ce code toi-même, tu as un problème.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par rogerio
    @Mayti4
    c'est clair que ça ne doit pas etre très simple

    mais j'ai vu que l'on pouvait récupérer l'adresse mémoire des éléments qui constituent la chaine à executer, il est théoriquement possible de faire executer la chaine

    en fait je n'ai pas besoin de solution mâchée, un lien vers un article ou un tuto devrait suffire
    C'est possible à faire, mais vu que tu es débutant en C++, ça ne sera pas possible. Le but n'est pas de recopier un bout de code dont on ne connait pas les tenants et les abouttissants.
    Maintenant, expose-nous ce que tu veux faire, ça nous aidera à t'aiguiller sur la bonne voie.
    S'il s'agit de décompresser un fichier puis de l'exécuter, c'est un script sh ou .bat qu'il te faut, pas un programme C++.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut lol
    merci touco mais je ne crois pas que ce soit le chemin à suivre, ta fonction change le type de variable, mois je veux juste trouver un moyen d'executer une suite d'adresses memoire

    @miles

    Le but n'est pas de recopier un bout de code dont on ne connait pas les tenants et les abouttissants.
    la je suis plus que d'accord avec toi et j'espere que tu a perçu que ce n'est pas du tout ce que je veux

    cas très bientôt résolu, je viens de découvrir ça

    asm( "instruction" );
    The asm command allows you to insert assembly language commands directly into your code. Various different compilers allow differing forms for this command, such as
    asm {
    instruction-sequence
    }
    or
    asm( instruction );

    effectivement c'est plus du C++ et si c'est compliqué à faire en C++, ça va être plus simple en asm

    rogerio

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Quel est le problème avec le fait d'écrire le fichier, quitte à le supprimer par la suite ? Ce serait de loin la solution la plus simple...

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le mot-clé asm ne t'aidera pas à faire grand chose ici... Il sert simplement à intégrer une syntaxe asm à un programme C++, or toi tu n'a aucune syntaxe, simplement un programme compilé.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut lol
    @laurent

    " Quel est le problème avec le fait d'écrire le fichier, quitte à le supprimer par la suite ? Ce serait de loin la solution la plus simple "

    c'est clair

    néanmoins je suis toujours parti du principe que la machine doit se plier à mes exigences, c'est une obligation, elle n'a pas le choix.


    cela m'a permis de repousser souvent la notion de faisabilité et aujourd'hui je code de temps en temps des petits projets perso

    plus c'est chiant et compliqué et plus ça m'excite


    j'aurai même pu demander à des amis de coder cette partie en C++, mais ça m'aurait gâché mon plaisir.

    pour ce qui est de l'asm, je n'ai pas encore testé car il faut d'abord que je convertisse la chaine

    faudra aussi que la compression BZ2 PHP soit compatible avec la fonction de decompression c++ (que je n'ai pas encore trouvé)

    rogerio

  12. #12
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Que cherches-tu à faire exactement ? Tu donnes des indices (BZ2, PHP...), mais je ne vois pas vraiment le but final.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut lol
    @touco

    c'est de la manipulation de fichier,

    je ne donne pas l'étendu du projet ni du script c++ parce que je voudrais que l'on m'aide le moins possible

    cad :
    >je construis mon script
    >je bute sur un probleme
    = je demande de l'aide aux experts

    rogerio

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il n'a pas l'air de vouloir le dire...

    rogerio > le mot clé "asm" indique que ce qui suit est de l'assembleur, pas du code binaire, cf ce que Loulou a dit.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut lol
    @Miles

    c'est justement ce qui me sauve

    donc je pense que si c++ rapporte les adresses memoire du code binaire executable, je vais pouvoir les manipuler en asm grace à la fonction asm

    si c'est ça, c'est trop cool

    je publierai la solution quand je l'aurai codé

    rogerio

  16. #16
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Comme ca a été dit par Laurent et Miles, asm ne permet pas de générer du code à exécuter, mais de coder un bout de programme (connu) en assembleur.

    Pour générer ton code, il te faudra soit écrire le fichier et l'exécuter (sans doute le plus simple), soit générer le code machine d'une fonction, avec prologue et épilogue spécifiques au compilateur et à l'environnement, puis l'appeler (ca doit donc être jouable mais plus complexe et encore moins portable que la première solution).

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut lol
    @touco

    c'est clair que ça ne va pas être simple


    c'est clair que le code asm va etre généré/hérité par c++ pour ensuite être executé par la commande asm

    néanmoins ça devra être un code asm le plus basic possible

    rogerio

  18. #18
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Je crois qu'il y a confusion sur asm : ce n'est pas une commande mais un mot-clé. Ca sert donc simplement de marqueur dans le code, on ne lui passe pas de paramètres comme à une fonction.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut hmmm
    hmmm

    [pause]

    je ne peux encore rien tester

    faut d'abord que je traduise la chaine

    http://www.developpez.net/forums/sho...d.php?t=140335

    http://www.developpez.net/forums/sho...139#post902139

  20. #20
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par rogerio
    salut à tous

    ici ==> total noob en c++

    je sais le titre est un peu confus.

    dans mon projet j'ai une variable qui contient du code binaire executable

    code = "contenu de calc.exe";

    le c++ aurait-il une fonction exec(code) qui me permettrait de lancer le code en mémoire comme si j'avais fait un double click sur calc.exe ?

    rogerio
    Le C++, certainement pas.

    Le probleme est loin d'etre simple. Tout d'abord, le code contenu dans un executable est prevu pour une architecture donnee et un S.E. donne. Arrive a le faire fonctionner avec une autre architecture est deja bien du boulot -- il faut ecrire un interpreteur ou un compilateur -- et avec un autre S.E. pose un tas de problemes interessants (que faire si les notions utilisees n'ont pas de correspondants?).

    On va simplifier le probleme en admettant que l'executable est prevu pour l'architecture et le S.E. utilise. Si celui-ci fournit une API pour cela -- je n'en connais pas dans les S.E. que je connais -- le probleme est trivial, sinon
    • il faut creer un nouveau process modifiable par le programme lancant et dans un etat suspendu (et si le S.E. ne permet pas cela, ca redevient interessant, en gros on repart vers l'interpretation/la compilation JIT)
    • il faut decoder le format de l'executable et faire le traitement fait habituellement par le chargeur pour initialiser le process
    • il faut reactiver le process
    Ca me semble est bien complique, surtout qu'une solution simple existe.

Discussions similaires

  1. executer une chaine de charactère comme étant un programme java
    Par benooo dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 28/06/2013, 13h59
  2. executer une chaine de caractères
    Par Misaki43 dans le forum C
    Réponses: 12
    Dernier message: 05/12/2012, 14h56
  3. executer une chaine char avec asm() [prob]
    Par rogerio dans le forum C++
    Réponses: 14
    Dernier message: 22/06/2006, 18h19
  4. Executer une chaine concatener dans une procedure stockée
    Par nic413 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 19/06/2006, 10h24
  5. convertion d'une chaine binaire
    Par Mister dans le forum C
    Réponses: 3
    Dernier message: 03/10/2003, 22h39

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