如何检索使用其ID的线程的起始地址?

我想使用它的ID来获取线程的起始地址。 可能吗?

Solutions Collecting From Web of "如何检索使用其ID的线程的起始地址?"

那么,这不是微不足道的,原因如下:在Win32子系统中, 所有线程都具有相同的起始地址。 在Windows中(但不包括)Vista它是在kernel32.dll (根据官方符号命名为BaseThreadStartThunk )。 在从Vista开始的Windows版本中,常见的起始地址现在是ntdll.dll RtlUserThreadStartBaseThreadStartThunk被重命名为BaseThreadInitThunk ,看起来现在只做Win32特定的任务)。

然而,你可以尝试的是暂停这个线程,检索它的CONTEXT (使用GetThreadContext ),并从那里遍历堆栈返回到顶部调查那里的参数。 这将需要对kernel32.dll线程启动例程的每个实现进行一些逆向工程,但它应该是可行的。

另一种方法是使用未记录的本地API NtQueryInformationThreadThreadQuerySetWin32StartAddress 。 还有一个关于这个功能的MSDN页面 ,但是它还远远没有完成。

所有你需要的是OpenThread,并调用NtQueryInformationThread

第二个参数设置为ThreadQuerySetWin32StartAddress

另请参阅这篇文章