Wissen Sie, wie man einen anderen Prozess-Stack in Delphi lesen kann?
Antworten
Zu viele Anzeigen?Ja.
Sie können Threads aufzählen mit Werkzeughilfe Funktionen; den Kontext erhalten Sie mit GetThreadContext()
; und lesen Sie den Stapelspeicher (d.h. mit ESP aus dem Kontext) mit ReadProcessMemory()
. Der Stapel wächst im Speicher nach unten, so dass das Lesen von Speicherplätzen nach ESP eine Abwärtsbewegung auf dem Stapel bedeutet.
Sie könnten einen Blick auf die "TThreadSampler.MakeStackDump"-Prozedur der folgenden Unit meines Sampling-Profilers werfen: http://code.google.com/p/asmprofiler/source/browse/trunk/Sampling/mcThreadSampler.pas
Diese Funktion kann aus demselben Thread, demselben Prozess oder verschiedenen Prozessen (jeweils mit einer eigenen optimierten Funktion) gelesen werden.
Übrigens: Mein Sampling Profiler liest Delphi-Debug-Symbole (.map, .jdbg, usw.), da es immer noch keinen guten Delphi-zu-Pdb-Debug-Symbol-Konverter gibt (damit Sie den Stack eines Delphi-Programms im Windows-Debugger oder Process Explorer, Visual Studio usw. ansehen können). Sie können auch meinen Sampling-Profiler verwenden, um den aktuellen Stack eines beliebigen Prozesses zu sehen! http://code.google.com/p/asmprofiler/wiki/AsmProfilerSamplingMode