1

我目前
NtQueryInformationThread(.., ThreadQuerySetWin32StartAddress, addr, ..)用于获取线程地址addr
msdn文档

NtQueryInformationThread 可能在未来版本的 Windows 中被更改或不可用

还,

请注意,在 Windows Vista 之前的 Windows 版本上,返回的起始地址仅在线程开始运行之前是可靠的。

检索线程地址的建议方法是什么?

4

1 回答 1

2

NtQueryXxxx 函数组是未记录的内部 Windows 内核函数。直到微软被迫在与美国司法部的和解中记录他们。他们这样做了,但保留在任何未来版本的 Windows 中更改其实施的权利,这是允许他们在 Windows 上进行创新所必需的。并保留不必使该函数在内核中的预期用途之外实际有用的权利。

警告非常准确,线程启动后,您将无法从此函数中获得可用的线程起始地址。它将指向真正的起始地址,即 ntdll.dll 中名为 __RtlUserThreadStart() 的内部帮助函数。当你有 Windows 的调试符号时,你可以在任何堆栈跟踪中看到它。每个启动线程的起始地址相同。

字写在墙上。不要使用它。

于 2012-12-11T22:12:10.113 回答