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++

Vue hybride

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

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

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    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 chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    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 éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    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
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut cool
    @Jean-Marc.Bourguet

    Ca me semble est bien complique, surtout qu'une solution simple existe
    cool


    aurais-tu quelques minutes à m'accorder et m'expliquer cette solution simple (ce que je recherche réellement)

    rogerio

  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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je pense qu'il parlait de la solution que tout le monde t'a donné depuis le début...

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Laurent Gomila
    Je pense qu'il parlait de la solution que tout le monde t'a donné depuis le début...
    Exact

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