Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ein Speicherabbild eines Prozesses erstellen, aber wie (https://www.delphipraxis.net/35165-ein-speicherabbild-eines-prozesses-erstellen-aber-wie.html)

AlphaBug 3. Dez 2004 12:29


Ein Speicherabbild eines Prozesses erstellen, aber wie
 
Hi :mrgreen:

ich habe folgendes Problem:

Ich lasse mir eine Liste der Prozesse mit Dateinamen und ProzessId ausgeben.
Nun wird mit OpenProcess() ein ausgewählter Prozess geöffnet.
Bis hier alles in Ordnung.

Mit ReadProcessMemory() kann ich nun den Speicher auslesen, oder mit WriteProcessMemory() reinschreiben.
Funktioniert auch,
aber gibt es eine Möglichkeit, sowas wie ein Speicherabbild eines Prozesses zu erstellen ?
Ich müsste dazu ja eigentlich nur die Anfangsadresse und den Speicherbedarf herausfinden, oder ?

Es wäre ja sinnlos den ganzen Adressraum auszulesen (2GB), wenn das Programm nur 2MB Speicher belegt.



Thx im vorraus :hi: .

c113plpbr 3. Dez 2004 18:40

Re: Ein Speicherabbild eines Prozesses erstellen, aber wie
 
Warscheinlich hilft dir da MSDN-Library durchsuchenVirtualQueryEx weiter, ich kenn mich damit aber ned so gut aus ...
Nur, was bringt dir das? Willst du den Prozess dumpen, ein Speicherabbild zur Analyse, oder was willst du denn sonst damit machen?

ciao, Philipp

QuickAndDirty 6. Dez 2004 11:58

Re: Ein Speicherabbild eines Prozesses erstellen, aber wie
 
falls es dir darum geht speicherlecks zu finden könnteste memproof benutzen.

AlphaBug 10. Dez 2004 15:08

Re: Ein Speicherabbild eines Prozesses erstellen, aber wie
 
@QuickAndDirty: es geht nicht darum, Speicherlecks zu finden, sondern darum die Addresse einer Variable anhand ihres Inhalts zu suchen.

@c113plpbr: über MSDN-Library durchsuchenVIRTUALQUERYEX war ich auch schon gestolpert, wusste aber nicht genau, wie ich es verwenden sollte. Das hat sich mittlerweile geändert.

Nun habe ich alles schon soweit, das ich die einzelnen Speicherblöcke ermitteln kann, aber es sind zu viele. Ich habs schon eingegrenzt auf einen Bereich zwischen MinimumApplicationAddress und MaximumApplicationAddress wobei MemInfo.State = MEM_COMMIT ist
(MemInfo = MEMORY_BASIC_INFORMATION, gesetzt von VIRTUALQUERYEX).

Muss ich noch weiter eingrenzen, oder was mache ich falsch ?
Unter Win2000 zeigt der Taskmanager für "System" eine Speicherbelegung von 216 KB, ich erhalte Werte von 700.000 Byte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr.

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