Erreur de segmentation
kyo3100
Messages postés
521
Statut
Membre
-
kyo3100 Messages postés 521 Statut Membre -
kyo3100 Messages postés 521 Statut Membre -
Bonjour à vous tous Ô grands gourous, cela faisait un moment que je n'avais pas eu besoin d'aide mais là j'ai un petit problème et je compte sur vous pour m'aider à le résoudre.
Donc voilà, j'ai compilé un programme avec gcc sous Linux, aucun probème, la compilation se déroule nickel.
Ensuite lorsque je veux lancer le programme dans la console je fais donc:
./"nom du programme"
et là il me met "Erreur de segmentation"
J'ai donc lancé le débugger gdb et il me trouve ça comme problème:
"Program received signal SIGSEGV, Segmentation fault.
0xb7da1b45 in fgets () from /lib/tls/i686/cmov/libc.so.6"
Un problème dans ma fonction fgets() et qui proviendrait d'une bibliothèque partagée??? sauf que la forme de ma fonction fgets est tout à fait correct et il n'y absolument aucunes fautes à l'intérieur.!
Donc voilà, j'attends vos lumières Ô grands gourous de la programmation en C ^^
Je tiens à préciser que les librairies stdio.h et stdlib.h sont biens incluses.
Donc voilà, j'ai compilé un programme avec gcc sous Linux, aucun probème, la compilation se déroule nickel.
Ensuite lorsque je veux lancer le programme dans la console je fais donc:
./"nom du programme"
et là il me met "Erreur de segmentation"
J'ai donc lancé le débugger gdb et il me trouve ça comme problème:
"Program received signal SIGSEGV, Segmentation fault.
0xb7da1b45 in fgets () from /lib/tls/i686/cmov/libc.so.6"
Un problème dans ma fonction fgets() et qui proviendrait d'une bibliothèque partagée??? sauf que la forme de ma fonction fgets est tout à fait correct et il n'y absolument aucunes fautes à l'intérieur.!
Donc voilà, j'attends vos lumières Ô grands gourous de la programmation en C ^^
Je tiens à préciser que les librairies stdio.h et stdlib.h sont biens incluses.
A voir également:
- Erreur de segmentation
- Erreur upes 1025 - Forum Téléviseurs
- Erreur t32 ✓ - Forum Livebox
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
13 réponses
Salut,
Peu de chances que l'erreur vienne de fgets mais plutôt de la fonction qui l'appelle.
Tu as certainement dépassé la taille de ton tampon ou encore passé un mauvais pointeur.
Peu de chances que l'erreur vienne de fgets mais plutôt de la fonction qui l'appelle.
Tu as certainement dépassé la taille de ton tampon ou encore passé un mauvais pointeur.
Ok, je vais jeter un coup d'oeil dans la fonction qui l'appelle ;-)
Si j'ai encore un problème je te dis quoi, merci pour ta réponse.
Si j'ai encore un problème je te dis quoi, merci pour ta réponse.
C'est encore moi! Tu m'excuseras mais j'ai rien trouvé d'anormal (je doit être un peu rouillé ^^")
Voilà le code source, c'est un programme développé par THC et qui teste la sécurité du ssh, je comptais l'utiliser pour tester mes connexions ssh sur mon réseau mais jusque là impossible de le lancer.
<---Début--->
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "/usr/include/openssl/ssl.h"
#include "/usr/include/openssl/err.h"
#include "/usr/include/openssl/evp.h"
#include "/usr/include/openssl/pem.h"
int
main(int argc, char *argv[])
{
FILE *fp = fopen(argv[1], "r");
EVP_PKEY *pk;
char *ptr = NULL;
char pwd[1024];
SSL_library_init();
pwd[0] = '\0';
while (1)
{
if (!fgets(pwd, sizeof pwd, stdin))
{
printf("Password not found.\n");
exit(0);
}
ptr = strchr(pwd, '\n');
if (ptr)
*ptr = '\0';
pk = PEM_read_PrivateKey(fp, NULL, NULL, (char *)pwd);
if (pk)
{
printf("THC THC THC THC THC THC THC THC THC\n");
printf("----> pwd is '%s' <-----\n", pwd);
printf("THC THC THC THC THC THC THC THC THC\n");
exit(0);
}
}
return 0;
}
<---Fin--->
Voilà le code source, c'est un programme développé par THC et qui teste la sécurité du ssh, je comptais l'utiliser pour tester mes connexions ssh sur mon réseau mais jusque là impossible de le lancer.
<---Début--->
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "/usr/include/openssl/ssl.h"
#include "/usr/include/openssl/err.h"
#include "/usr/include/openssl/evp.h"
#include "/usr/include/openssl/pem.h"
int
main(int argc, char *argv[])
{
FILE *fp = fopen(argv[1], "r");
EVP_PKEY *pk;
char *ptr = NULL;
char pwd[1024];
SSL_library_init();
pwd[0] = '\0';
while (1)
{
if (!fgets(pwd, sizeof pwd, stdin))
{
printf("Password not found.\n");
exit(0);
}
ptr = strchr(pwd, '\n');
if (ptr)
*ptr = '\0';
pk = PEM_read_PrivateKey(fp, NULL, NULL, (char *)pwd);
if (pk)
{
printf("THC THC THC THC THC THC THC THC THC\n");
printf("----> pwd is '%s' <-----\n", pwd);
printf("THC THC THC THC THC THC THC THC THC\n");
exit(0);
}
}
return 0;
}
<---Fin--->
Un train peut en cacher un autre.
Je me demande si c'est pas un autre fgets, par exemple est-ce que PEM_read_PrivateKey n'appellerait pas fgets par hasard? Ca me semblerait logique vu le nom de la fonction et des paramètres qu'elle prend.
Pour le savoir quand tu es dans gdb, après être tombé sur ton erreur, tape bt poursavoir quelle est la fonction appelante. Si c'est PEM_read_PrivateKey c'est que tu as fait une mauvaise utilisation de la fonction (buffer trop petit ou que sais-je) :-)
Autre indice: vérifie que fp n'est pas égal à NULL, tu as peut être passé un mauvais chemin pour ton fichier.
Je me demande si c'est pas un autre fgets, par exemple est-ce que PEM_read_PrivateKey n'appellerait pas fgets par hasard? Ca me semblerait logique vu le nom de la fonction et des paramètres qu'elle prend.
Pour le savoir quand tu es dans gdb, après être tombé sur ton erreur, tape bt poursavoir quelle est la fonction appelante. Si c'est PEM_read_PrivateKey c'est que tu as fait une mauvaise utilisation de la fonction (buffer trop petit ou que sais-je) :-)
Autre indice: vérifie que fp n'est pas égal à NULL, tu as peut être passé un mauvais chemin pour ton fichier.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je te met ce que gdb m'a affiché après la commande "bt"
Program received signal SIGSEGV, Segmentation fault.
0xb7dc9b45 in fgets () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0xb7dc9b45 in fgets () from /lib/tls/i686/cmov/libc.so.6
#1 0xb7cc83f6 in ?? () from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#2 0xb7cc6981 in BIO_gets () from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#3 0xb7cfe5a0 in PEM_read_bio () from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#4 0xb7cffcf8 in PEM_bytes_read_bio ()
from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#5 0xb7d0335f in PEM_read_bio_PrivateKey ()
from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#6 0xb7d036d9 in PEM_read_PrivateKey ()
from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#7 0x08048743 in main (argc=-2082109099, argv=0x758918ec) at ssh-crack.c:55
Apparemment tu as raison, on dirait que c'est PrivateKey qui appelle fgets, un conseil??? lol
Program received signal SIGSEGV, Segmentation fault.
0xb7dc9b45 in fgets () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0xb7dc9b45 in fgets () from /lib/tls/i686/cmov/libc.so.6
#1 0xb7cc83f6 in ?? () from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#2 0xb7cc6981 in BIO_gets () from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#3 0xb7cfe5a0 in PEM_read_bio () from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#4 0xb7cffcf8 in PEM_bytes_read_bio ()
from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#5 0xb7d0335f in PEM_read_bio_PrivateKey ()
from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#6 0xb7d036d9 in PEM_read_PrivateKey ()
from /usr/lib/i686/cmov/libcrypto.so.0.9.8
#7 0x08048743 in main (argc=-2082109099, argv=0x758918ec) at ssh-crack.c:55
Apparemment tu as raison, on dirait que c'est PrivateKey qui appelle fgets, un conseil??? lol
Alors soit ton tampon est trop petit, en ce cas il faut voir avec la documentation de la fonction. Je connais pas bien OpenSSL alors bon :-)
Ou bien ton pointeur de fichier est foireux (égal à NULL ?) donc là faudra plutôt vérifier le chemin vers le fichier que tu passes en paramètre de ton programme :-)
Je remarque dans ton premier message que tu lances ton programme sans nom de fichier en paramètre. Ca expliquerait tout :-)
Ou bien ton pointeur de fichier est foireux (égal à NULL ?) donc là faudra plutôt vérifier le chemin vers le fichier que tu passes en paramètre de ton programme :-)
Je remarque dans ton premier message que tu lances ton programme sans nom de fichier en paramètre. Ca expliquerait tout :-)
Ok, je vais essayer de voir tout ça(ça va me demander un peu de tps lol)
Je te remercie en tout cas ;-)
Je te remercie en tout cas ;-)
Lol, et bien en fait je vais te demander une dernière faveur désolé xD
J'ai trouvé le prototype de la fonction PEM_read:
IMPLEMENT_PEM_read_fp(name, type, str, asn1)
Et celui de PEM_read_PrivateKey:
PEM_read_PrivateKey(fp,x,cb,u) (EVP_PKEY *)PEM_ASN1_read( \
Eclaire moi encore une fois stp! ^^
J'ai trouvé le prototype de la fonction PEM_read:
IMPLEMENT_PEM_read_fp(name, type, str, asn1)
Et celui de PEM_read_PrivateKey:
PEM_read_PrivateKey(fp,x,cb,u) (EVP_PKEY *)PEM_ASN1_read( \
Eclaire moi encore une fois stp! ^^
Tu n'as pas à t'en soucier, c'est PEM_read_PrivateKey qui s'occupe de ça, toi tu as juste à vérifier que tu lui passe un pointeur de fichier et un buffer correct.
Comme je t'ai dit vérifie que ton fichier est correct, est ce que tu passes un chemin vers un fichier correct en paramètre de ton programme.
Je te laisse, je vais au zoo d'Amneville, y'aura des ours et des loups et ce sera cool.
Je reviens ce soir, si tu as un soucis n'hésite pas à poster sur cette discussion, je regarderai.
Comme je t'ai dit vérifie que ton fichier est correct, est ce que tu passes un chemin vers un fichier correct en paramètre de ton programme.
Je te laisse, je vais au zoo d'Amneville, y'aura des ours et des loups et ce sera cool.
Je reviens ce soir, si tu as un soucis n'hésite pas à poster sur cette discussion, je regarderai.
Re, j'espère que ta visite au zoo était cool, en tout cas j'ai tjs pas trouvé.
D'ailleurs ça commence à doucement me souler ^^ parce que là je sais pas, je vois pas, j'arrive même pas à comprendre où pointe les pointeurs et je comprends pas les paramètres qu'attend PEM_read.
J'ai essayé de changer le nom du fichier, d'en créer un nouveau, rien ça fonctionne pas, je dois avouer que j'en ai marre là xD
J'ai même fait une petite modif histoire de voir si ça pouvait changer quelque chose mais rien:
"FILE *fp = NULL;
fp = fopen(argv[1], "r");"
J'ai essayé de changer le nom du fichier, en plus lorsque je vois qu'il veut ouvrir argv, c'est la fonction main non?
Désolé mais là je vois pas, vraiment ^^
D'ailleurs ça commence à doucement me souler ^^ parce que là je sais pas, je vois pas, j'arrive même pas à comprendre où pointe les pointeurs et je comprends pas les paramètres qu'attend PEM_read.
J'ai essayé de changer le nom du fichier, d'en créer un nouveau, rien ça fonctionne pas, je dois avouer que j'en ai marre là xD
J'ai même fait une petite modif histoire de voir si ça pouvait changer quelque chose mais rien:
"FILE *fp = NULL;
fp = fopen(argv[1], "r");"
J'ai essayé de changer le nom du fichier, en plus lorsque je vois qu'il veut ouvrir argv, c'est la fonction main non?
Désolé mais là je vois pas, vraiment ^^