From: "Dan Sugalski" <[EMAIL PROTECTED]>
> So, could someone with some windows experience go digging and find
> out how one would:
>
> 1) Find the address of the base of a thread's stack
> 3) Find out what a thread's current stack pointer is
I would do 1), 3) this way ...
thdl = _beginthreadex(NULL, 0, thread_function, &arg, CREATE_SUSPENDED,
&thraddr);
#if defined(_X86_)
ctx.ContextFlags = CONTEXT_FULL;
#elif defined(_ALPHA_)
ctx.ContextFlags = CONTEXT_INTEGER;
#else
/* _MIPS_ and etc */
#endif
GetThreadContext(thdl, &ctx);
#if defined(_X86_)
current_stack_ptr = ctx.Esp;
#elif defined(_ALPHA_)
current_stack_ptr = ctx.IntSp;
#else
/* _MIPS_ and etc */
#endif
VirtualQuery((LPCVOID)current_stack_ptr, &mbi, sizeof(mbi));
stack_allocbase_addr = mbi.AllocationBase;
> 2) Find out how big a thread's stack is
By default, OS reserves 1 MB of memory for a thread's stack. One can specify
a different size with a linker option or a STACKSIZE statement in the .DEF
file. So it's, sort of, up to us how big a thread stack is. No problem here.
> Dan
0x4C56