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

Outils Discussion :

Analyseur de code


Sujet :

Outils

  1. #1
    Lucas Panny
    Invité(e)
    Par défaut Analyseur de code
    Bonjour,

    Je suis à la recherche d'un outil qui permet de tester un projet au niveau des erreurs: fuites de mémoires, buffer overflow, etc.
    Je connais un peu KlocWork mais y a-t-il d'autres? Freeware?

    Pour tester un projet ASSEMBLEUR par ex?

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    klocwork fait une analyse statique du code

    Pour une vérification à l'exécution il y a valgrind, mais seulement pour certains processeurs. Evidemment cela ne marchera pas pour un programme assembleur 'pure' (non issus d'une compilation c/c++) car dans ce cas valgrind sera incapable de savoir par exemple qu'on alloue/désalloue de la mémoire, il ne le sait qu'en repérant les appels aux fonctions d'allocation/désallocation 'standard'

  3. #3
    Lucas Panny
    Invité(e)
    Par défaut
    Donc il ne sera jamais possible d'analyser les bugs d'un .exe ou autres binaires?

    J'ai testé avec Klocwork un projet C++ et il affiche toujours des Security Vulnerabilities sur les buffers overflow (sprintf et autres). N'est-ce pas déjà évité par mon compilateur: Visual C++ 2005?

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par Lucas Panny Voir le message
    Donc il ne sera jamais possible d'analyser les bugs d'un .exe ou autres binaires?
    si s'il est compatible valgrind (ce qui est le cas sous Linux avec un processeur Intel par exemlpe, compilation avec debug of course)

    J'ai testé avec Klocwork un projet C++ et il affiche toujours des Security Vulnerabilities sur les buffers overflow (sprintf et autres). N'est-ce pas déjà évité par mon compilateur: Visual C++ 2005?[/QUOTE]

    ce n'est pas au compilateur de corriger les erreurs du programmeur

    sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int i = ...;
    char s[4];
    sprintf(s, "%d", i);
    klocwork produit un buffer overflow car il y a pas mal d'entiers dont la représentation sous forme de chaine ne tient pas sur 3 caractères

  5. #5
    Lucas Panny
    Invité(e)
    Par défaut
    Les risques de dépassement de pile sont quelquefois managés par certains compilateurs:
    Toutefois elle reste assez complexe à mettre en oeuvre car les protections contre ce type de failles se multiplient (protection anti-dépassement de tampon depuis gcc 4.1, patch sur gcc tels que StackShield / PaX, compilateur StackGuard, flag /GS sous Microsoft Visual C++, …).
    Avec Visual C++ que j'utilise, lorsqu'on compile: utiliser /GS

    Concernant Valgrind, ne s'associe-t-il pas à un compilateur et teste après le binaire produit? C'est à dire qu'on n'y teste pas n'importe quel exécutable? En fait, il semble qu'il ne détecte pas les erreurs de dépassement mais seulement les non désalloués et les fuites?

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    [QUOTE=Lucas Panny;3771927]Avec Visual C++ que j'utilise, lorsqu'on compile: utiliser /GS
    débordement de pile et débordement de tampon ne sont pas la même chose, même si le second peut éventuellement provoquer le premier

    Concernant Valgrind, ne s'associe-t-il pas à un compilateur et teste après le binaire produit?
    comprends pas, que veut dire s'associe-t-il ?

    En fait, il semble qu'il ne détecte pas les erreurs de dépassement mais seulement les non désalloués et les fuites?
    il teste aussi les débordement de structures allouées lorsque le compilateur produit des accès du type read/write(adresse_base, offset)

    encore une fois c'est un interpréteur de binaire, il n'a donc pas accès au programme initiale et à la sémantique associée sauf en repérant les appels de quelques fonctions particulières comme celles liées aux allocations

  7. #7
    Lucas Panny
    Invité(e)
    Par défaut
    Concernant valgrind, merci j'ai pigé son fonctionnement!
    Concernant les débordements/dépassements, je parle du buffer overflow, valgrind détecte-t-il?

    Y a-t-il des freewares sur l'équivalent de KlocWork?

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    Citation Envoyé par Lucas Panny Voir le message
    Concernant les débordements/dépassements, je parle du buffer overflow, valgrind détecte-t-il?
    tu as lu mes réponses précédentes ?
    tu comprendras peut être mieux avec des exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int a[8];
    int b;
    char * p = new int[16];
    
    a[9] = 0; // valgrind ne voit rien car il ne connait pas la taille de 'a'
    b = a[2]; // valgrind indique un accès à de la mémoire non initialisée ('a' non initialisé)
    b = p[17]; // valgrind voit le débordement car il connait la taille du vecteur

  9. #9
    Lucas Panny
    Invité(e)
    Par défaut
    OK merci Valgrind est donc à peu près ce que je cherche (tester un .EXE)

  10. #10
    Lucas Panny
    Invité(e)
    Par défaut
    L'ironie avec Klocwork c'est qu'il ne détecte pas la plupart des probables overflow de buffer dans mon projet

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const INT ACCUMULATOR_CHAR_COUNT				= 2048;
    
    BOOL CUTF16File::LoadAccumulator()
    {
    	BYTE cbBuffer[ACCUMULATOR_CHAR_COUNT * sizeof(WCHAR)];

  11. #11
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    je ne comprends pas, où est sensé être le problème dans ce code ?

  12. #12
    Lucas Panny
    Invité(e)
    Par défaut
    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
    22
    23
    24
    25
    BOOL CUTF16File::LoadAccumulator()
    {
    	BYTE cbBuffer[ACCUMULATOR_CHAR_COUNT * sizeof(WCHAR)];
    
    	UINT uCount = CStdioFile::Read(cbBuffer, ACCUMULATOR_CHAR_COUNT * sizeof(WCHAR));
    
    	WCHAR* pwszBuffer = reinterpret_cast<WCHAR*>(cbBuffer);
    
    	for(UINT i = 0; i < uCount / 2; i++)
    	{
    		WCHAR c = *pwszBuffer++;
    
    		if(TRUE == m_bByteSwapped)
    		{
    			BYTE b1 = BYTE(c >> 8);   // high order
    			BYTE b2 = BYTE(c & 0xFF); // low order
    
    			c = WCHAR(b1 | (b2 << 8));
    		}
    
    		m_Accumulator.push_back(c);
    	}
    
    	return 0 == uCount;
    }
    En fait, on charge dans cbBuffer du texte, et bien à un certain cas, des données dépassant 2048*sizeof(WCHAR) sont entrées causant un STACK OVERFLOW!!

  13. #13
    Lucas Panny
    Invité(e)
    Par défaut
    Le problème avec VALGRIND c'est que c'est pour LINUX, je travaille sous WinXP

Discussions similaires

  1. Analyseurs de code
    Par Emilie MARQUOIS-OGEZ dans le forum Langage
    Réponses: 3
    Dernier message: 29/10/2007, 20h52
  2. Analyseur de code ASP
    Par Oluha dans le forum ASP
    Réponses: 6
    Dernier message: 01/02/2007, 12h20
  3. [Java] Les outils vérificateurs/analyseurs de code
    Par lalie.perso dans le forum Autres
    Réponses: 2
    Dernier message: 20/03/2006, 18h53
  4. [Plugins] Analyseur de code
    Par SEMPERE Benjamin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 13/10/2005, 13h40
  5. Analyseur de code (statistique)
    Par Boons dans le forum Choisir un environnement de développement
    Réponses: 9
    Dernier message: 13/08/2003, 12h22

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