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 :

instabilité sous windows


Sujet :

C

  1. #1
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut instabilité sous windows
    bonjour,

    Je fais une manip qui à priori me parait anodile, mais qui rend mon code instable. J'ai un code assez complexe en C & C++ sous windows avec du Qt4.8 compilé avec gcc4.7. Et j'ai besoin de le protéger par un checksum que j'ai bricolé comme suit.
    J'ai une chaine dont le contenu en dur me permet de me repérer dans le binaire de l'exe.
    Avec un code externe je calcul la somme des octects dans l'exe excluant la partie contenant ma chaine. Puis j'inscrit en dur dans l'exe cette somme dans les derniers octects de la chaine en question.
    Ainsi au démarrage de mon exe je refais ce checksum que je compare aux données inscrite dans la chaine. protégeant ainsi cette exe contre toute modification visant à le modifier.
    Mais voila, mon code est trés stable tant que je n'ai pas inscrit la somme dans la chaine. Aussitot que j'ai le fait, il fonctionne mais finit toujours par se cracher à des endroits différents.
    Je n'arrive pas à reproduire ce comportement instable en mode débug. Il y a t-il quelquechose dans la structure d'un exe sous windows que je détruit en modifiant une chaine via un code externe?
    Merci de vos lumiéres

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    En même temps, je trouve votre mécanisme assez dangereux.
    Déjà, dans les différences :
    en release (avec optimisation), l'executable ne sera pas agencé obligatoirement de la même façon qu'en debug. Du coup, votre code peut être bougé / manipulé et peut se référer à des morceaux qui n'existe pas spécialement (optimisation oblige). Du coup, je ne suis pas spécialement étonné que cela ne marche pas en release.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Merci de votre réponse mais je n'arrive pas à comprendre pas le souci, exactement.
    Une fois compilé en release, je repère l'emplacement de ma chaine dans l'exe. C'est une suite de 30 caractères bien définis. Et via un code externe je modifié un de ces caractère. Je ne vois pas pourquoi cela altérerai la structure de l'exe.

    Pour le mode debug, je procédais exactement de la même façon, c'est juste que dans ce cas l'exe est différent, mais le résultat semblais plus stable. Je parle au passé, parce que je viens de me rendre compte que ce n'est pas le cas non plus. Il fini aussi par planter.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    La questions que l'on peut se poser est : "Est-ce que le code est ultra propre ?" (pas de warnings, pas de fuite / lecteur de mémoire invalide et tout ce genre de trucs).
    Maitenant, si Windows ou le compilateur se sert de votre chaine pour autre chose, ou s'il remarque qu'elle n'est pas utilisée, ou s'il fait lui même un check sum d'intégrité, cela peux planter.
    Il faudrait être sur que des optimisations n'altèrent pas votre chaine, ni même le code qui utilise la chaîne.
    De plus, il faut être sur que le '\0' à la fin de la chaîne n'est pas altéré non plus, ça serait dommage.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    A priori, pas de fuite de mémoire ou d'autre probléme de ce type. J'ai validé ca sous linux avec valgrind.
    Ensuite la chaine est bien utilisée et dailleurs bien lue au démarrage du code qui la trouve bien et qui trouve bien les valeurs du checksum à l'interieur qui sont correctes.
    Et puisqu'en mode debug sans optimisation je rencontre aussi les instabilités, je ne pense pas que ce soit liée aux optimisations. Dailleurs cette partie du code est systématique exclue des options d'optimisation, parce que je me suis éffectivement posais comme vous la questions.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    N'y a-t-il pas déjà des mécanismes de checksum et de certificats sous Windows?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Assembleur sous Windows et sous Linux
    Par Bibouda dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 28/10/2002, 07h55
  2. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43
  3. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15
  4. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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