Jon*_*ong 5 c windows winapi stack
我们怎样才能获得这些信息?我想这是依赖于操作系统的,我正在运行Windows所以我的问题是指Windows API.
是否有任何函数可以为我们做 - 为调用线程获取剩余的堆栈内存?
或者,如果我们能够找到以下详细信息,我们将能够自行计算:
CreateThread).但是如果它是主要线程,它是由操作系统为我们的程序启动的,或者我们没有明确启动的任何其他线程,我们如何找到它?esp,或者获取局部变量的地址,以获得一个接近的位置.这是出于教育目的,但我想它可以用来阻止递归算法导致堆栈溢出 - 而不是使用任何最大深度限制功能.
你可以使用NtCurrentTeb(),它可以获得指向TEB的指针.这有NT_TIB作为其第一个成员:
typedef struct _NT_TIB
{
PEXCEPTION_REGISTRATION_RECORD ExceptionList;
PVOID StackBase;
PVOID StackLimit;
PVOID SubSystemTib;
// ....
} NT_TIB, *PNT_TIB;
Run Code Online (Sandbox Code Playgroud)