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 :

Probleme fonction execve


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 126
    Par défaut Probleme fonction execve
    Bonsoir a tous,Ben voila après avoir tout essayer je me tourne vers vous j'ai un probleme sur la fonction execve lorsque je compile j'obtient un message d'erreur "argv 2 pointeur incompatible type" et le programme s"execute et plante quand meme pourtant je pense bien indiquer les bon paramettre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <string.h>
    #include<process.h>
    #include<stdio.h>
     
     
     
    int main(int argc, char *argv[])
    {
       char t1[100]={0};
       char *t2[3];
       t2[0]="test.exe";
       t2[1]=t1;
       t2[2]=NULL;
       memset(t1,'\x61',5);
       memset(&t1[5],'\x00',1);
       execve(t2[0],t1,NULL);
     
       getchar();	
      return 0x0;
    }
    J'ai aussi utiliser _execve fonction de windows mais idem meme resultat .Si vous pouviez me donnez un coup de pouce j'aprécierai.MERCI d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    Par défaut
    Citation Envoyé par chuko Voir le message
    sur la fonction execve lorsque je compile j'obtient un message d'erreur "argv 2 pointeur incompatible type" et le programme s"execute et plante quand meme pourtant je pense bien indiquer les bon paramettre.
    Hello,

    Le deuxième argument de execve() est un tableau de pointeurs vers des chaînes de caractères. « t1 » n'est qu'un tableau de caractères.

    Bon courage.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 126
    Par défaut
    Merci de votre réponse mais pourriez vous m'expliquer la différence car je débute dira-t-on et il me semblait avoir pourtant crée un pointeur sur mon tableau. Quelle est la différence entre un tableau de caractères et de pointeur ? Merci d'avance

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu peux nous donner la ligne de commande que tu veux exécuter ? Ce n'est pas évident à deviner avec ton code. notamment, le premier élément du deuxième argument d'execve devrait être le nom du programme. Les arguments du programme commencent au deuxième élément.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    Par défaut
    Citation Envoyé par chuko Voir le message
    Merci de votre réponse mais pourrriez vous m'expliquer la difference car je debute dira t'on et il me semblait avoir pourtant cree un pointeur sur mon tableau quelle et la difference entre un tableau de carctère et de pointeur merci d'avance
    - Un nom de tableau, quand il est utilisé au sein d'une expression, est un pointeur vers ce tableau (plus précisément : vers le premier élément de ce tableau).

    - Pour faire une chaîne de caractères, on met tous ces caractères dans un tableau. Et pour passer cette chaîne de caractères, on passe en fait le pointeur vers ce tableau.

    - Le deuxième paramètre de execve() attend une liste de paramètres, chacun représenté par une chaîne de caractères (ceux-là même que l'on est censé avoir écrit sur la ligne de commande). Chaque chaîne est repérée par un pointeur. Tous ces pointeurs sont réunis dans un tableau. On passe alors un pointeur vers ce tableau.

    Autrement dit, t1 est de type char * et l'argument de execve() est de type char **. Je crois que ce que tu voulais faire, c'était écrire t2 à la place de t1 dans le deuxième paramètre.

  6. #6
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Le deuxième argument de execve() est un tableau de pointeurs vers des chaînes de caractères.
    Tu veux dire un tableau de pointeurs vers des caractères ou un tableau de chaine.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 126
    Par défaut
    Merci pour vos réponses et navré de poster aussi tard mais dodo oblige en fait. Mon programme s'appelle tout simplement test.exe et les arguments que je souhaite lui passer sont une serie de "a". Les grand pros l'auront compris, je travaille les fameux overflow.

  8. #8
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par chuko Voir le message
    Merci pour vos réponse et navre de poster aussi tard mais dodo oblige en fait mon programme s'apelle tout simplement test.exe et les argument que je souhaite lui passer son une serie de "a" les grand pros lauron comprit je travaille les fameux overflow.
    Ah bon? je ne vois pas d'overflow dans ce code.

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *args[3];
    args[0] = "test.exe";
    args[1] = "aaaaa";
    args[2] = NULL;
    execve("/path/to/test.exe", args, NULL);
    Avec bien sûr toutes les variations possible, par exemple si tu veux passer n "a" en argument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    args[1] = malloc(n+1);
    memset(args[1], 'a', n);
    (args[1])[n] = '\0';

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 126
    Par défaut
    Merci pour vos réponses. Grâce à celles-ci j'ai pu résoudre le problème et pour l'histoire de l'overflow, en fait c'est pas dans ce code qu'il est présent mais dans un autre programme que j'appelle, d'où l'utilisation de execve(). Merci encore à tous.

Discussions similaires

  1. [XSL]Probleme fonction recursive
    Par Le-Cortex dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 12/12/2005, 15h10
  2. [Mail] Probleme fonction mail()
    Par tissot dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2005, 12h55
  3. problème fonctions callback
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/10/2005, 14h47
  4. probleme fonction gethostbyname
    Par oclone dans le forum Développement
    Réponses: 6
    Dernier message: 14/04/2005, 10h31
  5. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52

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