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

 Delphi Discussion :

Comment récupérer une chaine de caractères à partir de son adresse mémoire ?


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Comment récupérer une chaine de caractères à partir de son adresse mémoire ?
    Bonjour,

    Je dois récupérer le résultat d'une fonction importée :
    Retrieves various OllyDbg settings and variables.

    int Plugingetvalue(int type);

    VAL_EXEFILENAME (char *) Name of the main debugged file
    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gDebugFileName : string;
    gDebugFileName := Plugingetvalue(VAL_EXEFILENAME);
    En fait, la fonction me renvoie un pointeur sur une chaine que je dois récupérer mais je ne sais pas comment procéder...

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @gDebugFileName := Pointer(Plugingetvalue(VAL_EXEFILENAME));
    et ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gDebugFileName := Format('%s', [PChar(Plugingetvalue(VAL_EXEFILENAME))]);
    Mais ça ne fonctionne pas...

    Merci,
    ZiP

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    as-tu essayé simplement ça (sans le @)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gDebugFileName := StrPas(PChar(Plugingetvalue(VAL_EXEFILENAME)));
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    Je viens d'essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gDebugFileName := StrPas(PChar(Plugingetvalue(VAL_EXEFILENAME)));
    Je n'ai pas d'erreur à la compilation mais à l'exécution, il m'affiche "????????????????????????" donc ça ne semble pas fonctionner.

    J'ai essayé une multitude de combinaisons qui sont restées actuellement sans succès...

    En fait, j'ai un pointeur sur une chaine en mémoire et je dois la récupérer pour la stocker dans une string.

    Merci,
    ZiP

  4. #4
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Un autre exemple qui compile mais qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gDebugFileName := PChar(Plugingetvalue(VAL_EXEFILENAME))^;
    Il affiche :
    ?
    ZiP

  5. #5
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir ShaiLeTroll,

    J'ai enfin trouvé la solution à mon problème en m'inspirant de la solution que vous m'avez proposée dans un autre post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gDebugFileName := PAnsiChar(AnsiString(Plugingetvalue(VAL_EXEFILENAME)));
    Tout bêtement...

    Merci,
    ZiP

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Comme d'hab, tu es en XE, pense que Char, PChar, String = Unicode !
    OllyDbg est ANSI !

    Cool, deux sujets résolu par une seule réponse !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Langage/Algorithme] Comment récupérer une chaine de caractères à partir de TMemoryStream
    Par Xavier dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/10/2014, 13h00
  2. Comment récupérer une chaine de caractère selon son début et sa fin?
    Par neo62matrix dans le forum Général Python
    Réponses: 3
    Dernier message: 21/03/2012, 10h08
  3. Récupérer une chaine de caractère à partir d'une autre
    Par Invité dans le forum Conception
    Réponses: 9
    Dernier message: 23/01/2012, 14h17
  4. Réponses: 2
    Dernier message: 14/01/2005, 15h40
  5. comment vider une chaine de caractère
    Par gaut dans le forum C
    Réponses: 13
    Dernier message: 12/09/2003, 11h30

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