IDを使用してスレッドの開始アドレスを取得したい。出来ますか?
2 に答える
必要なのは、 OpenThread とNtQueryInformationThreadを呼び出すことだけです
2 番目のパラメータをThreadQuerySetWin32StartAddress
こちらの記事も参考にしてください
これは、次の理由から簡単ではありません。Win32 サブシステムでは、すべてのスレッドが同じ開始アドレスを持っています。VistaまでのWindows(ただしVistaは含まない)では、内部にありました(公式のシンボルに従ってkernel32.dll命名されました)。BaseThreadStartThunkVista以降のWindowsバージョンでは、共通の開始アドレスが含まRtlUserThreadStartれていますntdll.dll(BaseThreadStartThunk名前が変更されBaseThreadInitThunk、現在はWin32固有のタスクのみを実行しているようです)。
ただし、スレッドを一時停止し、 ( を使用して)スレッドを取得し、そこからスタックをトラバースして先頭に戻り、そこでパラメータを調査することを試みることができます。スレッド開始ルーチンの各実装のリバース エンジニアリングが必要になりますが、実行可能なはずです。CONTEXTGetThreadContextkernel32.dll
別の方法として、文書化されていないネイティブ APINtQueryInformationThreadを で使用することもできますThreadQuerySetWin32StartAddress。関数に関するMSDN ページもありますが、完全にはほど遠いものです。