1

IDを使用してスレッドの開始アドレスを取得したい。出来ますか?

4

2 に答える 2

2

必要なのは、 OpenThread とNtQueryInformationThreadを呼び出すことだけです

2 番目のパラメータをThreadQuerySetWin32StartAddress

こちらの記事も参考にしてください

于 2012-06-04T20:38:50.937 に答える
1

これは、次の理由から簡単ではありません。Win32 サブシステムでは、すべてのスレッドが同じ開始アドレスを持っています。VistaまでのWindows(ただしVistaは含まない)では、内部にありました(公式のシンボルに従ってkernel32.dll命名されました)。BaseThreadStartThunkVista以降のWindowsバージョンでは、共通の開始アドレスが含まRtlUserThreadStartれていますntdll.dllBaseThreadStartThunk名前が変更されBaseThreadInitThunk、現在はWin32固有のタスクのみを実行しているようです)。

ただし、スレッドを一時停止し、 ( を使用して)スレッドを取得し、そこからスタックをトラバースして先頭に戻り、そこでパラメータを調査することを試みることができます。スレッド開始ルーチンの各実装のリバース エンジニアリングが必要になりますが、実行可能なはずです。CONTEXTGetThreadContextkernel32.dll

別の方法として、文書化されていないネイティブ APINtQueryInformationThreadを で使用することもできますThreadQuerySetWin32StartAddress関数に関するMSDN ページもありますが、完全にはほど遠いものです。

于 2012-06-04T20:39:54.943 に答える