2014-02-13 30 views
5

是否可以使用Win32 API獲取任何線程的堆棧大小和限制?我知道,這是有可能以下列方式當前線程:如何獲得使用Win32 API的任何線程的堆棧大小和堆棧限制

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

不過,我還沒有發現,返回NT_TIB結構對於任何給定線程處理,TID作爲輸入參數,一個Win32 API函數。

回答

4

如果您正在調試此過程,則可以從CREATE_THREAD_DEBUG_INFO結構中的lpThreadLocalBase字段獲取TIB/TEB地址。

否則,您將不得不依賴於半記錄的NtQueryInformationThread API。如果您使用ThreadBasicInformation類別,則返回的THREAD_BASIC_INFORMATION struct的字段爲TebBaseAddress

+1

添加:另外,如果我的記憶服務,KUSER_SHARED_DATA包含TEB地址。現在註冊。 :-) – Xearinox

+1

如果線程在另一個進程中,您將不得不使用'ReadProcessMemory()'來讀取位於'TebBaseAddress'處的'TEB'。 –

+0

我選擇了第二個選項,它工作正常。謝謝! – Benny