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/)
-   -   MemAlloc einer Appl untersuchen. Mit API Hook? (https://www.delphipraxis.net/88376-memalloc-einer-appl-untersuchen-mit-api-hook.html)

matmok 14. Mär 2007 20:38


MemAlloc einer Appl untersuchen. Mit API Hook?
 
Hallo Forum,
Ich arbeite mit BCB6 unter WinXP und möchte ein Tool schreiben (ähnlich CodeGuard oder MemoryValidator), welches die Speicher nutzung einer Application erkennt und darstellt. Sinn des ganzen soll nicht sein die bestehenden Tools zu ersetzen oder zu verbessern, sonder ich möchte lediglich verstehen wie es funktioniert. Besonders interessieren mich dabei die C++Objekte die von mir selbst im zu untersuchenden Programm angelegt bzw. fereigegeben werden, weniger interessieren mich die Speichervorgänge von genutzen Drittanbieterkomponenten oder genutzten DLLs.
Meine Idee ist es dort einen Hook zu setzen wo die entsprechenden Speicheroperationen vom Betriebssystem durchgeführt werden um dann zu protocollieren wer wann wieviel Speicher allociert bzw. freigegeben hat. Macht man das so? Wenn ja, was muss ich wo und wie hooken?

mfg,
matmok

marabu 15. Mär 2007 08:01

Re: MemAlloc einer Appl untersuchen. Mit API Hook?
 
Herzlich willkommen in der Delphi-PRAXiS, matmok.

Direkt helfen kann ich dir leider nicht, aber vielleicht hilft dir ein Blick in das Open-Source-Projekt FASTMM, welches einen alternativen Memory Manager bereit stellt. Mir scheint, dass BORLANDMM.DLL auch in BCB verwendet wird, und im FASTMM-Projekt sind Hinweise für BCB-Benutzer enthalten.

Freundliche Grüße

sirius 15. Mär 2007 08:25

Re: MemAlloc einer Appl untersuchen. Mit API Hook?
 
Ich hatte auch mal zum testen einfach alle Speicherseiten ermittelt, die das Programm benutzt und zusammenaddiert. Ob das so funktioniert und sinnvoll ist, weis ich nicht. (Ich meine funktionieren tut es, aber ob das Ergebnis sinnvoll ist?)
Mit virtualquery kann man sich ja so durchhangeln.
Für eine fremde Anwendung könnte evtl virtualqueryEx reichen oder du injizierst den Code gleich in den Prozess, dann kannst du auch gleich localAlloc oder was auch immer hooken.

Beispiel (nur) in Pascal:
Delphi-Quellcode:
function MemoryUse:integer;
var mbi:memory_basic_information;
    si:system_info;
    pos:cardinal;
begin
  getsysteminfo(si);
  pos:=cardinal(si.lpMinimumApplicationAddress);
  result:=0;
  while pos<cardinal(si.lpMaximumApplicationAddress) do begin
    virtualquery(pointer(pos),mbi,sizeof(mbi));
    if (mbi.State and mem_commit)>0 then inc(result,mbi.RegionSize);
    inc(pos,mbi.regionsize);
  end;
end;

matmok 17. Mär 2007 11:53

Re: MemAlloc einer Appl untersuchen. Mit API Hook?
 
Hallo und vielen Dank für die Antworten.
Hatte noch keine Zeit FASTMM zu untersuchen, werde dies aber noch machen. Der zweite Tip ist wahrscheinlich ungeeignet wenn ich die Anzahl und die Namen der generierten Objeckte herausfinden möchte.
Wenn ich neues rausegfunden habe werde ich es posten.
mfg, matmok


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 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