我通过 CreateToolhelp32Snapshot
函数枚举进程中的所有线程。我想获得每个线程的一些基本堆栈信息。更具体地说,我想获得堆栈底部地址,如果可能的话,我想获得当前堆栈顶部地址。基本上这是在 WinDbg 中用 ~*k
命令显示的信息。那么如何从线程的ID或HANDLE中获取堆栈信息呢?
最佳答案
(可以找到定义 here .)
获取堆栈边界:
THREAD_BASIC_INFORMATION basicInfo;
NT_TIB tib;
// Get TEB address
NtQueryInformationThread(YOUR_THREAD_HANDLE, ThreadBasicInformation, &basicInfo, sizeof(THREAD_BASIC_INFORMATION), NULL);
// Read TIB
NtReadVirtualMemory(YOUR_PROCESS_HANDLE, basicInfo.TebBaseAddress, &tib, sizeof(NT_TIB), NULL);
// Check tib.StackBase and tib.StackLimit
要获取 esp
的值,只需使用 GetThreadContext
。
关于windows - 如何在 Windows 上获取线程堆栈信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3918375/