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] Méthodes détection buffer overflow/overrun


Sujet :

C

  1. #1
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut [C] Méthodes détection buffer overflow/overrun
    Bonjour à tous,

    Je cherche à savoir s'il existe des méthodes pour détecter les buffers overflows/overrun en C ?

    Je m'explique : voilà un code simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
        int*a = (int*)malloc(10*sizeof(int));
        a[10] = 50; // overflow
    }
    Je surcharge déjà les malloc/free avec des macros pour tracker les fuites de mémoire.

    La seule solution que j'ai trouvée pas très robuste est de "surallouer" la zone mémoire et de la préremplir avec une séquence connue. Et si cette zone est corrompue alors il y a overflow. Exemple : je demande une allocation de 10 entiers mais j'en alloue en fait 20 et je mets dans les cases 10 à 20, une séquence connue donc si je fais un overflow, je risque de détruire cette zone. Mais c'est pas superbe car si je fais un tab[100] = 50; ma solution ne marche pas...

    Je sais qu'il existe de outils (le plus souvent payant pour cela) mais je voudrais avoir ma solution customisée

    Est-il possible de détecter ce type d'erreur ?

    Même question mais pour un tableau statique ?

    Merci beaucoup

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 528
    Points
    3 528
    Par défaut
    Alors à l'exécution même "hors mode debug", je ne sais pas....

    Mais valgrind (avec les flags de debug à la compilation) pourra te dire quand tu dépasses très légèrement des tableaux, et quand tu dépasses amplement.
    Évidement, ça fonctionne lors de la phase de debug, donc pas possible avec ça de rattraper des cas non-prévus (mais il y aurait un problème de conception à ce moment là ?)

  3. #3
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par Metalman Voir le message
    Alors à l'exécution même "hors mode debug", je ne sais pas....

    Mais valgrind (avec les flags de debug à la compilation) pourra te dire quand tu dépasses très légèrement des tableaux, et quand tu dépasses amplement.
    Évidement, ça fonctionne lors de la phase de debug, donc pas possible avec ça de rattraper des cas non-prévus (mais il y aurait un problème de conception à ce moment là ?)
    Oui Valgrind détecte les dépassements de tableaux.
    En fait la question était plutôt comment fait-il cela ?
    A mon avis, ca doit pas être du tout facile mais au cas où une solution m'échappe, je pose quand même la quesiton

  4. #4
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 528
    Points
    3 528
    Par défaut
    Normalement il override les mallocs en effet...
    Après, hormis ce que tu supposes, il faudrait lire la doc de Valgrind qui explique beaucoup ces choses (et qui est gratuit + open source il me semble) !

  5. #5
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonjour,

    Valgrind ne détecte que les dépassement des «tableaux» mallocés (cf la faq).
    Il y a bien une option -fbounds-check mais elle n'est pas reconnue par le front-end C de gcc.
    Si tu compiles au moins en O2 tu as l'option -Warray-bounds qui sera activée en même temps que -Wall ...
    Mais bon on reste en C et ce que tu demandes ferait se lever les aficionados de la perf qui te traiteraient d'hérétique ...

  6. #6
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Il y a bien une option -fbounds-check mais elle n'est pas reconnue par le front-end C de gcc.
    C'est quoi le front-end C ?

  7. #7
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Pour faire simple, gcc signifie Gnu Compiler Collection. gcc peut compiler plusieurs langages (c, c++, ada, fortran, java, ...), il y a un front-end pour chaque langage qui se charge de parser le source et de le transformer en une forme intermédiaire qui sera compilée par un back-end pour une plateforme particulière.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Address Sanitizer (ASAN) est un plugin à Clang, qui est lui même un frontend C, C++, objectif C, C++ pour le compilateur LLVM.

    Les erreurs de manipulation mémoire qu'il peut détecter sont les suivante:

    -use after free
    -stack et heap overflow
    -global out of bounds
    -double free

    Ce plugin insére des gardes fou à la compilation qui stope l'exécution du programme lors d'une corruption mémoire même si elle n'empeche pas le déroulement du programme. De plus une trace très précise est fournit sur l'origine de la corruption mémoire.

    Ce que je vien de dire est un extrait du magazine misc. Cependant pour répondre à ta question, ce plugin doit probablement posséder une très bonne documentation de ses mécanismes interne. D'autre part même si le projet est jeune, il à déjà fait ses preuves.

    Sinon si tu veux plonger au plus profont du problème, il existe des formalisations mathématiques qui peuvent aidé à détecter du codes qui vas se tirer une balle dans le pied.

    Je ne suis pas expert dans ce domaine mais il me semble que le langage ADA posséde un compilateur très pointilleux sur ces détails. typequement le compilateur ADA est suceptibe de te dire avant même que tu n'exécute ton binaire compilé que celui-ci vas ce tiré une balle dans le pied.

    Bref ce genre de problème ne date pas d'aujourd'hui, il est toujours d'actualité et la documentation ne manque pas, je pense que tu trouvera ton bonheur.

    En espérant t'avoir aidé.

  9. #9
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 528
    Points
    3 528
    Par défaut
    Oui mais l'ADA c'est autre chose : tu imposes des contraintes, donc le compilo va t'interdire certaines choses... du coup ton code devient "forcément" safe ! (ça devient un choix de paradigme + ou - safe, en gros)
    Mais pas sûr que cela aide en C...

    Mais l'idée de Clang avec ses vérifs est pas mal je trouve !

  10. #10
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Pour faire simple, gcc signifie Gnu Compiler Collection. gcc peut compiler plusieurs langages (c, c++, ada, fortran, java, ...), il y a un front-end pour chaque langage qui se charge de parser le source et de le transformer en une forme intermédiaire qui sera compilée par un back-end pour une plateforme particulière.
    Merci pour l'explication

    Clang j'en ai déjà entendu parlé, si je comprends bien c'est un autre compilateur qui remplace GCC ? Je vous avouerais que j'ai du mal à comprendre la phrase :
    The goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler.
    Source : site officiel

    Pour mes projets, j'utilise exclusivement GCC pour compiler et linker mes projets et pas LLVM mais apparemment c'est compatible GCC.

  11. #11
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    gcc n'est que l'outil le plus répandu pour compiler du C. Il y en a plusieurs qui sont sous licence libre comme clang ou open64, sous une licence plus ou moins permissive comme ceux d'intel(icc) ou oracle(ex sun, c99/solstudio pour l'ide) et d'autres payants (ibm). Tous sont utilisables sous linux. clang ne «remplace» pas gcc (du moins pour l'instant) dans le sens où le développement de gcc est abandonné au profit de clang. clang est toutefois préféré par apple et freebsd (qui l'adopte comme compilateur de base dans les prochaines versions je crois).

    gcc et clang diffèrent sur certains points, gcc peut sembler plus monolithique par rapport à clang/llvm desquels tu peux indépendamment utiliser certaines fonctionnalités comme par exemple analyser à la volée (sans le compiler réellement) un code source pour immédiatement indiquer les erreurs dans un éditeur de texte. Mais les deux ont une approche similaire : un front-end par langage qui donne une forme de code intermédiaire qui est traité par un back-end qui l'utilise ensuite pour créer du code pour une plateforme. LLVM est en gros le nom d'une de ces représentation intermédiaire.

    La détection statique des over/underflows est difficile, même si une vérification basique est faite. Je pensais que tu voulais t'orienter vers ce genre de vérification par gcc.

    En ce qui concerne la détection runtime c'est plus délicat. Valgrind est un outil très répandu qui remplit bien son rôle et c'est vrai que les dèv gcc/c ne s'en sont pas trop préoccupé jusqu'à ce que les dèv clang/LLVM le fassent (enfin c'est mon point de vue). Ces derniers ont créé un module qui instrumente le code pour prévenir et diagnostiquer ce genre d'erreurs. Ça a été récupéré par les dèv gcc et intégré dans la dernière grosse version stable de gcc, la 4.8. Donc depuis la 4.8, tu as à ta disposition l'option -fsanitize=address (même option pour clang) qui lors d'un plantage te diagnostiquerait mieux l'erreur (j'emploie le conditionnel mais au bout du compte toute information supplémentaire est au final mieux qu'un segfault ). Il y a un module d'aide au diagnostique pour les threads aussi qui a été intégré de LLVM vers gcc.
    Il y a cependant un prix à payer. Tout comme pour l'utilisation avec valgrind le code est plus lent à l'exécution.

    Comme je ne me suis pas encore amusé avec je ne pourrais pas t'en dire beaucoup plus. C'est une option qui me semble intéressante dans certains cas, pas forcément à utiliser aveuglément mais qui n'est certainement pas à négliger.

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Une solution, que j'ai opté pour ma bibliothèque de chaîne de caractères, est de détecter la limite du tableau par rapport à l'argument fournit et de realloc le tout puis insérer la valeur supplémentaire.

    Alors soit, tu créés un tableau avec 1 indice de plus que tu te gardes de côté pour déterminer la limite du tableau avec une valeur spéciale que tu définit en avance, soit tu créés un nouveau type par le biais d'une structure et tu créés à côté les fonctions qui la gères par rapport au type de données qu'elle peut y stocker.

    J'ai toujours opté pour la seconde solution qui reste plus souple mais qui demande un peu plus de travaille car dans la solution 1 rien ne t'empêche de mettre une valeur dans ton dernier indice et tu te retrouve avec le même problème.

  13. #13
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par kwariz Voir le message
    gcc n'est que l'outil le plus répandu pour compiler du C. Il y en a plusieurs qui sont sous licence libre comme clang ou open64, sous une licence plus ou moins permissive comme ceux d'intel(icc) ou oracle(ex sun, c99/solstudio pour l'ide) et d'autres payants (ibm). Tous sont utilisables sous linux. clang ne «remplace» pas gcc (du moins pour l'instant) dans le sens où le développement de gcc est abandonné au profit de clang. clang est toutefois préféré par apple et freebsd (qui l'adopte comme compilateur de base dans les prochaines versions je crois).
    [....]

    Comme je ne me suis pas encore amusé avec je ne pourrais pas t'en dire beaucoup plus. C'est une option qui me semble intéressante dans certains cas, pas forcément à utiliser aveuglément mais qui n'est certainement pas à négliger.
    Superbe explication ! Merci
    J'ai pas encore la dernière version de GCC, j'utilise la 4.7.2 actuellement. Mais je vais regarder de plus près cette nouvelle option après avoir mis mon compilo à jour ^^
    Effectivement, je me doute que le code sera plus lent, je me souviens de mon jeu que j'avais passé sous Valgrind, j'avais perdu pas mal de FPS...

    EDIT : Snif, la dernière version de gcc n'est pas dispo avec MinGW pour Windows Je devrais attendre...
    Citation Envoyé par Franck.H
    Alors soit, tu créés un tableau avec 1 indice de plus que tu te gardes de côté pour déterminer la limite du tableau avec une valeur spéciale que tu définit en avance, soit tu créés un nouveau type par le biais d'une structure et tu créés à côté les fonctions qui la gères par rapport au type de données qu'elle peut y stocker.
    La première méthode est celle que j'utilise actuellement mais elle n'est pas fiable du tout
    Sinon, je n'ai pas compris ta deuxième méthode, tu pourrais montrer un exemple ? Merci

  14. #14
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Aspic Voir le message
    La première méthode est celle que j'utilise actuellement mais elle n'est pas fiable du tout
    Sinon, je n'ai pas compris ta deuxième méthode, tu pourrais montrer un exemple ? Merci
    Quelque chose dans ce genre:
    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
    typedef struct
    {
       int      *  val;
       size_t      size;
    }MyInt;
     
     
    /* Ajout d'un entier. */
    void my_int_add (MyInt ** ptr, int val)
    {
       /* Code... */
    }
     
    /* Et pourquoi pas une fonction de suppression d'un entier. */
    void my_int_remove (MyInt ** ptr, size_t index)
    {
       /* Code... */
    }
     
    /* Suppression de l'objet complet. */
    void my_int_free (MyInt ** ptr)
    {
       /* Code... */
    }
    Un peu comme si tu faisait une liste en fin d'compte. Je te le concèdes, c'est un peu différent à l'utilisation comparé à un tableau mais au moins ca te permet de construire des fonctions robustes.

    Ici dans la structure tu as un membre en plus qui te permet de savoir combien d'entier tu as déjà ajouté à ton tableau d'entiers vu qu'à chaque appel de my_int_add() tu incrémentes le membre size ce qui te permet également de réallouer plus facilement l'espace pour ajouter un nouvel entier au tableau.

    De plus, tout en continuant à passer par cet objet, tu pourrais construire, par exemple, une fonction de tri vu qu'en plus tu sais combien tu stock d'entiers donc facile

    J'ai souvent utilisé ce genre de concept et de toute façon en C tu n'as pas toujours le choix mais au moins c'est propre et j'ai jamais regretté ce genre d'approche.

    Un petit exemple d'utilisation :
    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
    #define <stdlib.h>
     
    int main (void)
    {
       MyInt * p_int = NULL;
     
     
       /* Exemple d'appel à my_int_add. */
       my_int_add (&p_int, 10);
     
       /* Exemple d'appel à my_int_free. */
       my_int_free (&p_int);
     
     
       return EXIT_SUCCESS;
    }
    Ici par exemple, la fonction my_int_add() allouerais d'elle même le pointeur p_int s'il vaut NULL (pour le premier ajout) au lieu de le faire autre part ce qui te permet de complètement spécialiser ta fonction et que ca reste transparent pour l'utilisateur si jamais quelqu'un devait l'utiliser à ta place

    Après c'est sûr, on sort du concept de la détection de fuites mémoire mais on entre dans la prévention voir même si c'est bien codé, dans l'élimination de fuites

    Tu peux même pousser le vice plus loin, le type MyInt, tu peux en faire carrément un type opaque comme ca, les membres de ta structure ne seront accessibles qu'à tes fonctions de gestion de ton objet et donc plus aucun moyen de déréférencer et d'accéder par accident à l'entier qui y est stocké et de le changer par maladresse

  15. #15
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    La nouvelle version GCC-4.8 ajoute une nouvelle fonctionnalité qui peut vous être utile :
    -fsanitize=address

    Elle vous permet de "detect heap-, stack-, and global-buffer overflow as well as use-after-free bugs"

    pour plus d'information : http://gcc.gnu.org/gcc-4.8/changes.html

  16. #16
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    La nouvelle version GCC-4.8 ajoute une nouvelle fonctionnalité qui peut vous être utile :
    -fsanitize=address

    Elle vous permet de "detect heap-, stack-, and global-buffer overflow as well as use-after-free bugs"

    pour plus d'information : http://gcc.gnu.org/gcc-4.8/changes.html
    MingW ne l'intègre pas encore cette version, pour le moment ils en sont à la version 4.7 donc il doit faire sans

  17. #17
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Ah ? Pourtant sur le portail d'opensuse mingw est déjà proposé en version 4.8 pour de la cross-compilation. Il me semble aussi qu'il y a une release sur sourceforge ... mais là je ne connais pas trop ...

  18. #18
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Ah ? Pourtant sur le portail d'opensuse mingw est déjà proposé en version 4.8 pour de la cross-compilation. Il me semble aussi qu'il y a une release sur sourceforge ... mais là je ne connais pas trop ...
    Pourquoi pas, moi j'ai juste regardé la version fournie avec C::B donc à installer à part quoi

  19. #19
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Après c'est sûr, on sort du concept de la détection de fuites mémoire mais on entre dans la prévention voir même si c'est bien codé, dans l'élimination de fuites
    Effectivement, mais je garde cette idée sous le coude
    Disons que dans mon cas c'est un peu plus complexe car disons que j'ai pas accès au code source mais j'ai le droit de surcharger les fonctions d'allocation de mémoire. Donc en n'ayant que comme point d'entrée malloc, realloc, calloc et free, difficile d'utiliser ta technique

    Sinon je crois qu'il n'y a pas encore de release de la version 4.8 pour MinGW mais une version instable est disponible. Ce n'est pas grave, j'attendrais la release officiel sur sourceforge

    Merci à vous !

  20. #20
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Aspic Voir le message
    Disons que dans mon cas c'est un peu plus complexe car disons que j'ai pas accès au code source mais j'ai le droit de surcharger les fonctions d'allocation de mémoire. Donc en n'ayant que comme point d'entrée malloc, realloc, calloc et free, difficile d'utiliser ta technique
    Bin il te faut rien de plus que free, malloc et ralloc pour monter tout ca et quelques conditions logique bien entendu mais si tu n'as pas le droit de procéder de la sorte soit

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Se protéger contre les buffers overflows
    Par pharaonline dans le forum C
    Réponses: 2
    Dernier message: 11/06/2006, 22h25
  2. Buffer overflow ?
    Par Albator5151 dans le forum Général Java
    Réponses: 6
    Dernier message: 08/02/2006, 01h23
  3. [oracle 9i] ORU-10027: buffer overflow
    Par jejam dans le forum Oracle
    Réponses: 7
    Dernier message: 01/09/2005, 13h05
  4. Erreur ORU-10027 : buffer overflow
    Par valerie90 dans le forum Oracle
    Réponses: 3
    Dernier message: 14/02/2005, 08h40
  5. [Erreur] buffer overflow
    Par cmoulin dans le forum Administration
    Réponses: 8
    Dernier message: 04/08/2004, 14h36

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