【问题标题】:How to get stack size and stack limit of any thread using Win32 API如何使用 Win32 API 获取任何线程的堆栈大小和堆栈限制
【发布时间】:2014-03-12 08:55:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ windows winapi stack


    【解决方案1】:

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

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

    【讨论】:

    • 添加:如果我没记错的话,KUSER_SHARED_DATA 包含 TEB 地址。现在点赞。 :-)
    • 如果线程在另一个进程中,你将不得不使用ReadProcessMemory()来读取位于TebBaseAddressTEB
    • 我选择了第二个选项,效果很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 2010-10-30
    • 2015-11-11
    • 2023-04-10
    • 2021-03-17
    • 2019-09-17
    • 2016-05-27
    • 2011-05-08
    相关资源
    最近更新 更多