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

How to get stack size and stack limit of any thread using Win32 API

本文关键字:堆栈 线程 Win32 何使用 API 获取 任何      更新时间:2023-10-16

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

NT_TIB *tib = (NT_TIB*)NtCurrentTeb();
DWORD stackBase = (DWORD)tib->StackBase;
DWORD stackLimit = (DWORD) tib->StackLimit;

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

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

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