如何使用Win32 API获取任何线程的堆栈大小和堆栈限制

Ben*_*nny 6 c++ windows winapi stack

是否可以使用Win32 API获取任何线程堆栈的大小和限制?我知道当前线程可以通过以下方式实现:

NT_TIB *tib = (NT_TIB*)NtCurrentTeb();
DWORD stackBase = (DWORD)tib->StackBase;
DWORD stackLimit = (DWORD) tib->StackLimit;
Run Code Online (Sandbox Code Playgroud)

但是,我还没有找到一个Win32 API函数,它返回NT_TIB任何给定线程HANDLE或TID 的结构作为输入参数.

Igo*_*sky 5

如果您正在调试进程,则可以从结构lpThreadLocalBase中的字段获取 TIB/TEB 地址CREATE_THREAD_DEBUG_INFO

否则,您将不得不依赖半文档化的NtQueryInformationThreadAPI。如果使用ThreadBasicInformation类别,则返回的THREAD_BASIC_INFORMATION结构体有一个TebBaseAddress字段。

  • 如果线程位于另一个进程中,则必须使用“ReadProcessMemory()”来读取位于“TebBaseAddress”的“TEB”。 (2认同)