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

Linux Discussion :

Savoir si une adresse est valide en RAM


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Savoir si une adresse est valide en RAM
    Bonjour à tous,
    Quelqu'un sait-il comment on fait sur Linux pour tester la validité de l'adresse en RAM d'une variable sans y accéder, même en lecture, et provoquer une erreur de segmentation si elle est invalide.
    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static int MaFonc(char *Txt)
    {
    if (!Txt || *Txt == '\0') return(0);
    }
    Le *Txt provoque une erreur de segmentation si Txt est une adresse invalide.

    Ya-t-il une fonction permettant de tester sans casser ?

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par filpo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static int MaFonc(char *Txt)
    {
    if (!Txt || *Txt == '\0') return(0);
    }
    Le *Txt provoque une erreur de segmentation si Txt est une adresse invalide.
    C'est un peu normal, puisque *Txt accède au contenu de la mémoire à l'adresse pointée ...

    Tu peux éventuellement tester si ton pointeur est différent de NULL, ce qui permet d'éviter certains problèmes en cas d'allocations ratées.

    Par contre, tu ne peux pas faire grand chose de plus ...

    Et si tes libérations de mémoire ne mettent pas SYSTEMATIQUEMENT tes pointeurs à NULL (et explicitement dans le code, en plus, car free ne le fait pas), ce n'est alors pas d'un grand secours.


    Après, il reste la possibilité d'utiliser les bibliothèques de deboggage qui controlent l'allocation et l'accès mémoire, comme "Electric Fence".

    Bon courage.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Une petite précision :
    Mon exemple était faux car il ne s'agit pas d'une fonction statique, mais d'une fonction en librairie que je voudrais protéger contre un appel externe avec en argument une adresse invalide !

    Le vrai exemple :

    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
    /* mwmwmwmwmwmwmwmwmwmwmwmwwmwmwmwmwmwmw */
    long MonInit(int NumVers, char *NomFicIni)
    {
    ST_SESSION  *pSess;
     
    if (NumVers != MA_VERSION) return(MAERR_VERSION);
     
    if (!(pSess = malloc(sizeof(ST_SESSION)))) return(MAERR_INIT);
    memset(pSess, 0, sizeof(ST_SESSION));
    pSess->Id_l = (long)pSess;
     
    if (!NomFicIni || !*NomFicIni)
        strcpy(pSess->FicIni_tc, FIC_INI_DEFAUT);
    else
        strcpy(pSess->FicIni_tc, NomFicIni);
     
    /* ........ etc ...... */

    Le '*NomFicIni' plante si l'appelant fourni une adresse à la onc.

    Aucun moyen d'éviter l'explosion ?

Discussions similaires

  1. Comment savoir si une URL est valide
    Par jauffray dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 30/05/2011, 13h28
  2. Comment savoir qu'une session est valide?
    Par clairette dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 21/02/2007, 20h57
  3. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 15h42
  4. [VB6] [Impression] Savoir si une imprimante est installée
    Par Norm59ttp dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 19/12/2002, 10h29
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 12h54

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