Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi gesamten Speicher eines fremden Prozesses fix durchsuchen! (https://www.delphipraxis.net/131793-gesamten-speicher-eines-fremden-prozesses-fix-durchsuchen.html)

Hedge 31. Mär 2009 00:26


gesamten Speicher eines fremden Prozesses fix durchsuchen!
 
Suche in einem fremden Prozess (ca. 400MB Speicher) nach einem Integer-Wert.
Besser gesagt beim 1. Mal durchsuchen soll eine Liste mit den Treffern erstellt werden und beim erneuten durchsuchen in diesen Ergebnissen soll diese auf 1 Möglichkeit reduziert werden.
Gibt es dafür eine elegantere (oder schnellere) Variante als alles mit der folgenden Funktion abzugrasen?:

Delphi-Quellcode:
function LeseSpeicher(adresse,size:integer):integer;
var p : pointer;
    puffer : array[0..1] of DWord;
    BytesRead: DWord;
    ProcessId,ThreadId,HandleWindow : integer;
   begin
        p := ptr(adresse);  //Adresse umwandeln:
        ThreadId := GetWindowThreadProcessId(ProgrammHandle,@ProcessId); //ProgrammHandle = globale Variable
        HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
        ReadProcessMemory( HandleWindow, p , @puffer[0], size, BytesRead );
        closehandle(HandleWindow);//close
        LeseSpeicher := Puffer[0];
   end;//von LeseSpeicher

mleyen 31. Mär 2009 06:36

Re: gesamten Speicher eines fremden Prozesses fix durchsuche
 
Zum einen könntest du, um es schneller zu machen, nicht andauernd unnötige prozeduren /funktionen aufrufen. (dh zB Handle nicht immer neu holen)
Weiterhin brauchst du nur bestimmte Sections durchlaufen.
Und nicht jedesmal Readprocess für einen Integer aufrufen.

Hedge 31. Mär 2009 08:15

Re: gesamten Speicher eines fremden Prozesses fix durchsuche
 
Zitat:

Weiterhin brauchst du nur bestimmte Sections durchlaufen.
Wie meinst du das mit den Sections bzw. wie ermittle ich in welcher Section die Variable zu finden ist?

Zitat:

Und nicht jedesmal Readprocess für einen Integer aufrufen.
Hast du denn Tipp wie viel Bytes ich optimal in den Puffer lesen sollte?

brechi 31. Mär 2009 08:22

Re: gesamten Speicher eines fremden Prozesses fix durchsuche
 
VirtualQueryEx hilft dir dabei

himitsu 31. Mär 2009 08:23

Re: gesamten Speicher eines fremden Prozesses fix durchsuche
 
Zitat:

Hast du denn Tipp wie viel Bytes ich optimal in den Puffer lesen sollte?
am Einfachsten Sektionsweise :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz