2

Delphi で別のプロセス スタックを読み取る方法を知っていますか??

4

2 に答える 2

8

はい。

Toolhelp関数を使用してスレッドを列挙できます。GetThreadContext();でコンテキストを取得します。でスタックメモリを読み取ります(つまり、コンテキストからESPを使用します)ReadProcessMemory()。スタックはメモリ内で下向きに成長するため、ESP がスタックを下った後のメモリ位置の読み取り。

于 2010-09-21T14:41:12.800 に答える
1

私のサンプリング プロファイラーの次のユニットの "TThreadSampler.MakeStackDump" プロシージャをご覧ください。

この関数は、同じスレッド、同じプロセス、または別のプロセス (それぞれが独自の最適化された関数を持つ) から読み取ることができます。

ところで、私の Sampling Profiler は、Delphi デバッグ シンボル (.map、.jdbg など) を読み取ります。これは、Delphi から Pdb への適切なデバッグ シンボル コンバータがまだないためです (したがって、Windows デバッガまたは Process Explorer、Visual Studio で Delphi プログラムのスタックを表示できます)。等)。私のサンプリング プロファイラーを使用して、任意のプロセスの現在のスタックを表示することもできます。 http://code.google.com/p/asmprofiler/wiki/AsmProfilerSamplingMode

于 2010-09-23T09:15:07.620 に答える