Delphi で別のプロセス スタックを読み取る方法を知っていますか??
2 に答える
はい。
Toolhelp関数を使用してスレッドを列挙できます。GetThreadContext()
;でコンテキストを取得します。でスタックメモリを読み取ります(つまり、コンテキストからESPを使用します)ReadProcessMemory()
。スタックはメモリ内で下向きに成長するため、ESP がスタックを下った後のメモリ位置の読み取り。
私のサンプリング プロファイラーの次のユニットの "TThreadSampler.MakeStackDump" プロシージャをご覧ください。
この関数は、同じスレッド、同じプロセス、または別のプロセス (それぞれが独自の最適化された関数を持つ) から読み取ることができます。
ところで、私の Sampling Profiler は、Delphi デバッグ シンボル (.map、.jdbg など) を読み取ります。これは、Delphi から Pdb への適切なデバッグ シンボル コンバータがまだないためです (したがって、Windows デバッガまたは Process Explorer、Visual Studio で Delphi プログラムのスタックを表示できます)。等)。私のサンプリング プロファイラーを使用して、任意のプロセスの現在のスタックを表示することもできます。 http://code.google.com/p/asmprofiler/wiki/AsmProfilerSamplingMode