2

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

4

2 回答 2

8

是的。

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

于 2010-09-21T14:41:12.800 回答
1

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

该函数可以从同一个线程、同一个进程或不同进程(每个都有自己的优化函数)读取。

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

于 2010-09-23T09:15:07.620 回答