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 :

C sous solaris


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Par défaut C sous solaris
    Bonjour, je dois faire un programme qui tourne sous solaris,

    Je l'ai fait sur mon pc, tout va bien et il fonctionne, mais quand je veux le migrer sur la solaris, mais lors de l'exécution,il me fait des erreurs de segmentation, alors que sous linux pas.

    Quelle différence y a t'il?

    Merci

    Olivier

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Sans le code, nous ne pouvons rien dire....

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par OlivierDotre
    Bonjour, je dois faire un programme qui tourne sous solaris,

    Je l'ai fait sur mon pc, tout va bien et il fonctionne, mais quand je veux le migrer sur la solaris, mais lors de l'exécution,il me fait des erreurs de segmentation, alors que sous linux pas.

    Quelle différence y a t'il?
    Tu as un comportement indéterminé dans ton code (je pencherais pour un débordement de buffer) qui passe, pour l'instant, inaperçu sous Linux et qui, coup de chance, plante sous Solaris.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Par défaut
    Désolé pour le retard,

    Mais voici le code en question

    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
     
    int main (int argc, char *argv[]){
     
     
    	print_terminal("Main","Starting...");
    	/* Check Arguments */
    	if (argc != 3) 					error_exit("2 argument required for cracking");
    	the_crack = malloc(sizeof(argv[1]));
    	the_crack = argv[1];
    	the_salt = malloc(sizeof(char *));
    	the_salt = get_salt(the_crack);
    	printf("The crack is %s\n",the_crack);
    	//printf("The longueur of the word %i\n",the_length);
    	printf("The salt is %s\n",the_salt);
    	cracking();
    	return 1;
    }
    Il met l'erreur avant d'afficher "The crack is ..." Je ne sais pas vraiment ce qu'il faut changer. J'appelle main avec comme paramètre un code crypter dont il faut retrouver la valeur.

    Merci

    Olivier

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Outre le fait que l'on ne sait pas ce que font les fonctions get_salt() et crack(), voici deux-trois remarques :

    * Aucune verification sur le resultat de malloc, en cas d'erreur d'allocation ca va mal se passer.
    * Il manque la liberation des zones memoires allouees.
    * sizeof(argv[1]) ne fournit pas la taille de la chaine mais la taille d'un pointeur.
    *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    the_crack = malloc(sizeof(argv[1]));
    the_crack = argv[1];
    Ici tu modifies le pointeur apres allocation. La zone allouee n'est plus reference ==> fuite memoire.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Par défaut
    Ok, merci, je vais tacher de résoudre tout ça.

    Je suis débutant en C, faut bien commencer un jour:d

  7. #7
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Je pense que le problème est effectivement dans :
    the_crack = malloc(sizeof(argv[1]));
    the_crack = argv[1];
    Je suppose que le but est de recopier la chaine reçue en argument de la ligne de commande dans la variable the_crack.

    Dans ce cas le plus simple est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    the_crack = strdup(argv[1]);
    Sinon si on veut utiliser malloc, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    the_crack = malloc(strlen(argv[1]));
    strcpy(the_crack, argv[1]);

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par pascal.barbier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    the_crack = malloc(strlen(argv[1]));
    strcpy(the_crack, argv[1]);
    malloc(strlen(argv[1]) + 1);

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Par défaut
    Bonjour et merci pour vos réponses,

    je ne connaissais pas strdup

    J'ai donc testé mais il me renvoi ceci comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    src/main.c: In function «main":
    src/main.c:49: attention : implicit declaration of function «strdup"
    src/main.c:49: attention : incompatible implicit declaration of built-in function «strdup"
    Hors j'inclus bien la string.h

    Qu'est ce qui m'échappe?

    Merci

    Olivier

  10. #10
    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
    as-tu tenté de compiler avec l'option -std=gnu99 ?
    De plus, un petit conseil comme ça, utilise sunstudio(12) ça te permettra de développer avec un compilateur c99 full compliance ce qui n'est pas négligeable quand même autant en profiter.
    Cordialement.

  11. #11
    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 pascal.barbier
    Sinon si on veut utiliser malloc, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    the_crack = malloc(strlen(argv[1]));
    strcpy(the_crack, argv[1]);

    Et le 0 final ?

  12. #12
    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 OlivierDotre
    je ne connaissais pas strdup

    J'ai donc testé mais il me renvoi ceci comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    src/main.c: In function «main":
    src/main.c:49: attention : implicit declaration of function «strdup"
    src/main.c:49: attention : incompatible implicit declaration of built-in function «strdup"
    Hors j'inclus bien la string.h

    Qu'est ce qui m'échappe?
    Déjà, il faut inclure <string.h>. Ensuite, comme ce n'est pas une fonction standard du C, mais POSIX.1, il faut sans doute activer le mode POSIX. Pour cela, consulter la doc de ton compilateur.

    Par exemple, avec gcc/Linux, on ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -D__POSIX_C_SOURCE=200112L
    (2 underscores)

    sur la ligne de commande du compilateur.

    Enfin, si ton implémentation du C ne connait pas strdup(), il faut l'implémenter toi même, et ce n'est pas difficile.

    Voici la définition officielle (POSIX.1) :

    http://www.opengroup.org/onlinepubs/...ns/strdup.html

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Par défaut
    Ce qui est bizarre c'est que j'utilise strdup dans un autre fichier (contenant plein de fonctions d'aide pour mon fichier principal) et que là il fonctionne. Sinon j'avais bien inclut string.h

Discussions similaires

  1. Spamassassin sous solaris
    Par wodel dans le forum Réseau
    Réponses: 2
    Dernier message: 12/02/2006, 12h53
  2. création database "oracle 10" sous "solaris 1
    Par elghayam dans le forum Oracle
    Réponses: 3
    Dernier message: 26/07/2005, 07h53
  3. interface avec opengl sous solaris
    Par lizou03 dans le forum OpenGL
    Réponses: 1
    Dernier message: 12/04/2005, 13h35
  4. outil de modelisation merise sous SOLARIS
    Par j_siyar dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 08/04/2005, 15h50
  5. [Sybase]Problème avec le BCP sous Solaris
    Par sl dans le forum Sybase
    Réponses: 3
    Dernier message: 09/09/2004, 07h56

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