如何使用 Win32 API 获取任何线程的堆栈大小和堆栈限制
How to get stack size and stack limit of any thread using Win32 API
是否可以使用 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
字段。
相关文章:
- C++线程的可用堆栈大小
- 应该将线程分配给堆栈还是堆?
- 其他线程堆栈上的可用内存无效
- 访问其他线程堆栈变量如何在C++中工作?
- 为什么RCOUT和RPRINTF在多线程时会导致堆栈限制错误
- 如何获取 systemc 线程的堆栈大小
- 线程安全堆栈实现
- C 线程堆栈地址范围
- 如何使用pthreads在Solaris上增加C 线程堆栈的大小
- 线程的单独堆栈空间的重要性
- 如何使用 Win32 API 获取任何线程的堆栈大小和堆栈限制
- 将信号从Anthoter非过程中发送到线程,并没有发生记录堆栈
- 多线程时,您该怎么做才能停止堆栈空间
- 分叉式堆栈复制线程C++
- 繁忙时线程安全堆栈互斥被破坏
- 线程的调用堆栈中充满了相同的函数调用--curl_inet_ntop()
- 非阻塞线程安全堆栈
- 检测 Linux 上多线程C++应用程序中的堆栈溢出/覆盖
- 堆栈上的线程返回地址是什么
- 静态变量与堆栈变量:线程安全与堆栈大小