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 :

Analyse statique : problème de unbound sprintf


Sujet :

C

  1. #21
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par Bktero Voir le message
    T'as cru que malloc alloue magiquement de la mémoire sans savoir où il va ?
    Non en effet malloc fait la même chose que ce mon code fait, à savoir allouer dans un tableau statique.
    Mais quand tu as besoin de compartimenter et/ou classifier la mémoire tu ne peux pas utiliser le malloc de base qui ne pointe que sur un seul espace mémoire.

    Bon après cela a tout de même ses limites même si cela apporte une certaine résilience face aux développeurs qui ne codent pas les tests de dépassement mémoire (car cela ne va impacter que les données de leur module)...
    J'attends toujours l'explication de l'ingénieur en chef indiquant le pourquoi un pointeur fou ne pourrait pas aller corrompre le tableau statique des données de tel module tout comme on pourrait l'avoir avec un seul grand tableau pour malloc...

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  2. #22
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Tu as peut-être %hhu si ton compilateur le permet ?
    Sinon, autant y aller directement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    assert(i < 100);
    chaine[0] = '0' + i / 10;
    chaine[1] = '0' + i % 10;
    chaine[3] = 0;
    Ça peut potentiellement être plus rapide que le sprintf en plus ? 3 assignations vs appel + parsing du motif + extraction des paramètres pour remplir le motif.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #23
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Merci Bousk je vais tester ce format (que je connaissais pas et que je n'avais pas trouvé avec un man).
    Mais j'ai peu d'espoir vis à vis de mon compilateur si même le man de ma distrib n'affiche pas le format alors qu'elle est plus récente.

    Effectivement l'affectation octet par octet est ce que je garde en dernier recours pour palier à ces défauts d'analyse.
    Certes cela serait mieux niveau charge CPU mais je ne suis pas dans des portions contraintes en temps donc autant garder la lisibilité au maximum si possible.
    J'ai déjà bien assez de portions de code qui nécessite une quantité non négligeable de café et de calme afin de comprendre ce que cela fait, et ce même avec les commentaires pourtant très bien fait.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  4. #24
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Tiens ? Moi non plus je ne connaissais pas le "%hh" qui semble être venu du C++ mais qui est accepté par mon gcc.
    Citation Envoyé par Bousk Voir le message
    Sinon, autant y aller directement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    assert(i < 100);
    chaine[0] = '0' + i / 10;
    chaine[1] = '0' + i % 10;
    chaine[3] = 0;
    Ça peut potentiellement être plus rapide que le sprintf en plus ? 3 assignations vs appel + parsing du motif + extraction des paramètres pour remplir le motif.


    Citation Envoyé par transgohan Voir le message
    Effectivement l'affectation octet par octet est ce que je garde en dernier recours pour palier à ces défauts d'analyse.
    Surtout n'oublie pas le commentaire pour expliquer le but de l'opération. Sinon le prochain qui passe se dira "il est con lui, il ne connait pas sprintf() ?"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #25
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Surtout n'oublie pas le commentaire pour expliquer le but de l'opération. Sinon le prochain qui passe se dira "il est con lui, il ne connait pas sprintf() ?"
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Si vous n'avez rien à faire pour les prochains 6 mois mais que vous êtes tout de même financé vous pouvez vous amuser cher développeur à remplacer le code qui suit par un sprintf.
    // Et passer ainsi un temps infini à chercher une solution de correction du défaut klocwork UNBOUND_SPRINTF sur laquelle j'ai déjà passé un temps non négligeable. 
    // Ou bien passer le temps requis pour rédiger au client le rapport de test ainsi que le code de mise en évidence que c'est un faux positif. 
    // Ou encore vous pouvez passer votre chemin en laissant ce code tel qu'il est et aller vaquer à de meilleurs occupations. 
    // signé : un développeur qui vous veut du bien

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #26
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par transgohan Voir le message
    on en effet malloc fait la même chose que ce mon code fait, à savoir allouer dans un tableau statique.
    Mais quand tu as besoin de compartimenter et/ou classifier la mémoire tu ne peux pas utiliser le malloc de base qui ne pointe que sur un seul espace mémoire.
    Ce qui est intéressant par contre, plutôt que plusieurs allocateurs de "mémoire brute", c'est d'avoir des pools de ressources : au lieu de récupérer des types, du récupère des objets Foo, Bar, Baz, etc. La gestion est simple, il n'y a pas de fragmentation.

    Citation Envoyé par transgohan Voir le message
    J'attends toujours l'explication de l'ingénieur en chef indiquant le pourquoi un pointeur fou ne pourrait pas aller corrompre le tableau statique des données de tel module tout comme on pourrait l'avoir avec un seul grand tableau pour malloc...
    Beaucoup de gens sont plein de conviction, et parmi eux un nombre non négligeable n'a pas de bonnes explications à ces convictions. Sans voir un peu plus en détails, difficile de juger. Mais par contre, l'allocation statique n'a jamais empêché le jardinage, c'est certain

Discussions similaires

  1. Analyser statique et analyser dynamique
    Par solar dans le forum C
    Réponses: 10
    Dernier message: 02/05/2011, 10h01
  2. Outil d'analyse statique du code PLSQL
    Par BREMARD dans le forum PL/SQL
    Réponses: 0
    Dernier message: 17/12/2008, 14h51
  3. Analyse statique de code
    Par Bayard dans le forum Analyse de code
    Réponses: 6
    Dernier message: 22/10/2007, 11h07
  4. Outils d'analyse statique
    Par Bayard dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 12/10/2007, 07h10
  5. Outils d'analyse statique de code assembleur ?
    Par atomic dans le forum Assembleur
    Réponses: 4
    Dernier message: 11/06/2004, 11h42

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