• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何在Windows上获取线程堆栈信息?

windows 来源:user473750 10次浏览

我枚举过程中的所有线程通过CreateToolhelp32Snapshot函数。我想为每个线程获取一些基本的堆栈信息。更具体地说,我想获得栈底地址,如果可能的话,我想获得当前栈顶地址。基本上这是在WinDbg中使用~*k命令显示的信息。那么我怎样才能从线程的ID或HANDLE中获取堆栈信息呢?如何在Windows上获取线程堆栈信息?

===========解决方案如下:

(定义可以发现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即可。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)