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

API, COM et SDKs Delphi Discussion :

Utilisation de ReadProcessMemory


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut Utilisation de ReadProcessMemory
    Bonjour !!
    J'aurai besoin d'un coup de patte.
    J'ai appris à modifier des valeurs contenues dans la mémoire en utilisant writeprocessmemory.

    Je souhaiterai maintenant pouvoir lire une zone définie 'array of byte' afin de pouvoir éxécuter des actions conditionnelles tel que :

    Si à l'adresse xxxxx, la valeur = xx xx xx xx xx alors ....

    Donc en résumé, pouvoir récuperer la valeur à une adresse donnée.
    Et surtout pouvoir par la suite stockée la valeur lue dans une variable.
    Merci!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Je ne suis peut être pas dans la bonne rubrique... en vue du peu de réponses.

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 934
    Billets dans le blog
    6
    Par défaut
    BOOL ReadProcessMemory(

    HANDLE hProcess, // handle of the process whose memory is read
    LPCVOID lpBaseAddress, // address to start reading
    LPVOID lpBuffer, // address of buffer to place read data
    DWORD nSize, // number of bytes to read
    LPDWORD lpNumberOfBytesRead // address of number of bytes read
    );
    apparemment, ce que tu lis est copié dans un buffer dont tu fournis l'adresse, et on te renvoie la longueur effectivement lue

    style (non vérifié...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
      SizeToRead: Cardinal;
      BytesRead: PCardinal;
      Buf: PByteArray;
    begin
      GetMem(Buf, MaxSize);
      if ReadProcessMemory(Hndl, Addr, Buf, SizeToRead, BytesRead)
      then begin
        if BytesRead<SizeToRead
        then ShowMessage('il en manque !');
        for i:=1 to BytesRead
        do ShowMessage('Octet '+IntToStr(i)+' = '+IntToStr(Buf^[i-1]));
      end;
      FreeMem(Buf);
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Je n'ai pas éssayé encore (manque de temps), mais d'aprés ce que tu me dit, je récupererai la longeur lue.

    Mais imaginons que les adresses xxxx1 jusqu'a xxx20 contiennent une chaine de caracteres.

    J'aurai aimé pouvoir récuperer les valeurs de chaque adresse afin de pouvoir par éxemple par la suite le convertir en texte et l'afficher dans un label.

    Donc mon but est vraiment de pouvoir récuperer les valeurs afin de les traiter.

    Merci encore.

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 934
    Billets dans le blog
    6
    Par défaut
    je pense que récupérer les valeurs dans un tableau d'octets permet réellement de les traiter ensuite ! le traitement dépendant de ce qui est sensé s'y trouver : booléen, string, record...

    pour un string, soit tu sais que de l'adresse x à x+n tu as une chaîne, qui se trouvera donc dans ton buffer : en tirer un string ou un pchar ne devrait pas être insurmontable, soit tu sais qu'une chaîne démarre en x, et là, il faut que tu lises par petits bouts, que tu cherches le #0 final etc
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Bon je suis re de retour sur ce projet et donc j'aurai re besoin d'aide car je m'en sors pas.

    Voici mon code :

    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
    var
    Form1: TForm1;
    Buf  : Pointer;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure ReadMem(Address: pointer; SizeToRead: cardinal);
    var
    BytesRead : Cardinal;
    Handle    : hWnd;
    begin
      Handle:= FindWindow(nil, 'Spider');
      ReadProcessMemory(Handle, Address, Buf, SizeToRead, BytesRead);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ReadMem(ptr($1012F60), 3);
      Memo1.text := string(buf);
    end;
    Mais visiblement il ne récupere rien du tout car la mémo reste vide :S
    Ou se trouve le probleme ?
    Merci

    Edit: en rajoutant getmem j'obtien quelque chose mais pas du tout ce que je suis sencé recevoir xD

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

Discussions similaires

  1. Readprocessmemory comment l'utiliser ?
    Par Monoski dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/04/2009, 21h17
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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