Delphi中其他进程的StackWalk?

时间:2010-09-21 13:28:06

标签: delphi winapi debugging readprocessmemory

你知道如何在delphi中读取另一个进程堆栈吗?

2 个答案:

答案 0 :(得分:8)

您可以使用Toolhelp函数枚举线程;获取GetThreadContext()的上下文;并使用ReadProcessMemory()读取堆栈内存(即使用上下文中的ESP)。堆栈在内存中向下增长,因此在ESP进入堆栈后读取内存位置。

答案 1 :(得分:1)

您可以查看我的采样分析器的以下单元的“TThreadSampler.MakeStackDump”过程:http://code.google.com/p/asmprofiler/source/browse/trunk/Sampling/mcThreadSampler.pas

此函数可以读取相同的线程,相同的进程或不同的进程(每个进程都有自己的优化函数)。

顺便说一句:我的采样分析器读取Delphi调试符号(.map,.jdbg等),因为仍然没有好的Delphi到Pdb调试符号转换器(因此您可以在Windows调试器或Process Explorer中查看Delphi程序的堆栈) ,Visual Studio等)。您还可以使用我的采样分析器查看任何进程的当前堆栈! http://code.google.com/p/asmprofiler/wiki/AsmProfilerSamplingMode