AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) MemAlloc einer Appl untersuchen. Mit API Hook?
Thema durchsuchen
Ansicht
Themen-Optionen

MemAlloc einer Appl untersuchen. Mit API Hook?

Ein Thema von matmok · begonnen am 14. Mär 2007 · letzter Beitrag vom 17. Mär 2007
Antwort Antwort
matmok

Registriert seit: 9. Feb 2006
Ort: Köln
22 Beiträge
 
Delphi 2007 Enterprise
 
#1

MemAlloc einer Appl untersuchen. Mit API Hook?

  Alt 14. Mär 2007, 21:38
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: MemAlloc einer Appl untersuchen. Mit API Hook?

  Alt 15. Mär 2007, 09:01
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: MemAlloc einer Appl untersuchen. Mit API Hook?

  Alt 15. Mär 2007, 09:25
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;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
matmok

Registriert seit: 9. Feb 2006
Ort: Köln
22 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: MemAlloc einer Appl untersuchen. Mit API Hook?

  Alt 17. Mär 2007, 12:53
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:58 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