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 :

Problème de pointeurs..embrouillé


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Problème de pointeurs..embrouillé
    Je suis en train de convertir du code assembleur vers le C++ et j'ai un petit souci d'interprétation..si vous pouviez m'aider..

    j'ai 2 pointeurs définis (qui pointent sur des emplacements de méemoire que je vais dumper)

    LPVOID pt1;
    LPVOID pt2;

    je voudrais en final que pt1 pointe vers l'adresse contenu dans le pointeur de pt2..

    comment puis-je affecter pt1 de facon à ce qu'il pointe vers l'adresse contenu dans le pointeur pt2

    example..
    pt2->zone memoire :00 34 56 78

    je voudrais que pt1 point vers l'adresse 78563400h de facon a ce que je puisse dumer le contenu de cette zone..

    merci de votre aide

  2. #2
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut

    pt1 = pt2;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    ben non..

    pt2 pointe vers l'adresse X
    je veux que pt1 pointe vers [X]

    si je fais pt1=pt2 (dejà fait) pt1 pointe vers l'adresse de pt2 or je veux que cela pointe vers le contenu de pt2

    du mal à me faire comprendre peut etre?? indirection de pointeur enfait..

    si je ne m'abuse:
    un pointeur pointe sur une adresse qui pointe vers une zone
    pt2->adr->zone
    je voudrais que pt1 considére que les 4 octets de la zone pointée par pt2 soit la nouvelle adresse du pointeur pt1

    pt1->[zone]->zone1

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par Frenchy
    si je ne m'abuse:
    un pointeur pointe sur une adresse qui pointe vers une zone
    pt2->adr->zone
    Un pointeur contient l'adresse d'une zone mémoire qui contient la variable pointée. Le contenu du pointeur EST l'adresse.

    pt2->zone


    Enjoy yourself !

  5. #5
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    pt1 = pt2;
    J'aurais dit la même chose, vu le manque de clarté.

    indirection de pointeur enfait..
    C'est tout de suite plus clair !
    Le problème c'est que les pointeurs en question sont de type LPVOID.
    On ne peut pas déréférencer un pointeur vide tant qu'il n'a pas été casté vers un autre type : impossible de résoudre une adresse à partir du type LPVOID.
    Les orteils servent à trouver les pieds de chaise et les montants de porte quand il fait noir.

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    pt2->adr->zone

    Je dirais plus :
    pt2 est une variable de type int par exemple

    Donc tu as l'adresse de l'adresse qui correspond à l'adresse de pt2 -> &pt2
    Pt2 pointe directement sur la zone (pt2->zone), il contient l'adresse de la zone (pt2)!


    Si tu veux pointer vers l'adresse de l'adresse, pour changer le pointeur de pt2 par exemple tu fais-> pt1=&pt2;

    Si tu veux pointer vers le même contenu mémoire que maintient pt2 alors pt1=pt2;

  7. #7
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    Si j'ai bien tout compris et en complément à mon post précédent, une solution pour un pointeur de la taille qu'occupe un int serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pt1 = reinterpret_cast<void*>(*reinterpret_cast<int*>(pt2));
    Les orteils servent à trouver les pieds de chaise et les montants de porte quand il fait noir.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    hum..pt1=&pt2...marche pas..en tout cas pas le résultat escompé en ayant recasté comme il faut


    en fait en me relisant pour etre plus clair, mon problème reviendrait

    à ce qu'une variable int toto contiennent une adresse comme valeur

    et je voudrais que pt1->[toto]->zone

    aisé à faire en assembleur mais est-ce possible en C, je me le demande

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par BertrandA
    Si j'ai bien tout compris et en complément à mon post précédent, une solution pour un pointeur de la taille qu'occupe un int serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pt1 = reinterpret_cast<void*>(*reinterpret_cast<int*>(pt2));
    j'ai essayé cela aussi et cela me provoque une erreur mémoire..pourtant cela me semble correct

    reinterpret_cast<int*>(pt2)= adresse de zone
    *reinterpret_cast<int*>(pt2))=contenu de l'adresse de zone
    puis le dernier cast pour indiquer que c'est un pointeur..

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Ca y est je crois avoir compris pourquoi il y a une erreur...même si le cast est correct , l'indirection me conduit à lire le contenu d'une zone mémoire allouée dynamiquement par un autre process pour cela je ne peux utiliser cette technique de lecture ReadMemoryProcess s'impose ..

    et c'est vrai qu'en réfléchissant, il doit être assez rare d'être dans un cas d'indirection de pointeur comme celui la..mais la question méritait bien ce petit post...riene que pour réviser la notion de cast

    (le pointeur pt1 ne devait trop aimé que je lui force une adresse d'un autre process )!!

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Quel est le but de ton appli ?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Le but de mon application est de dumper des zones mémoires d'un process quelconque, j'utilise l' API OpenProcess ou CreateProcess avec DEBUG_PROCESS, je place des Breakpoints à des endroits stratégiques et je dumpe les tables mémoires dans un fichier..

    Je me suis polarisé sur ce problème en oublianr que je n'avais pas l'accés comme cela à la mémoire..

    Si tu es intéressé ou d'autres je peux faire un petit brief sur la manière de d'utiliser un debuggeur sous C++ en positionnant un BP lecture de la mémoire etc...

Discussions similaires

  1. Problème de *pointeur sur des char
    Par Spartan03 dans le forum C++
    Réponses: 2
    Dernier message: 18/09/2005, 14h20
  2. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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