栈总结篇

今天想总结一下栈的知识。
栈是和线程关联的,每个线程会有一个栈。默认情况下,应用程序的栈是1MB,kernel程序的的栈是256KB。
在设置栈的时候有两个参数(/STACK:reserve[,commit])
其中reserve是栈的最大容量,但线程刚启动的时候,栈并没有那么大,随着需要增长。commit是增长的一个步进。
在ring3中,线程相关的信息存储在_TEB块里,位于fs段中。_TEB的最前面是_NT_TIB块。
ntdll!_NT_TIB
   +0x000 ExceptionList    : Ptr32 _EXCEPTION_REGISTRATION_RECORD
   +0x004 StackBase        : Ptr32 Void 栈顶部地址
   +0x008 StackLimit       : Ptr32 Void  栈大小
   +0x00c SubSystemTib     : Ptr32 Void
   +0x010 FiberData        : Ptr32 Void
   +0x010 Version          : Uint4B
   +0x014 ArbitraryUserPointer : Ptr32 Void
   +0x018 Self             : Ptr32 _NT_TIB



posted @ 2009-03-26 16:38  Fan Zhang  阅读(190)  评论(0编辑  收藏  举报