了解栈溢出,首先要了解什么是栈。
栈是一种典型的先进后出( First in Last Out )的数据结构,其操作主要有压栈(push)与出栈(pop)两种操作。
**进栈(PUSH):**将一个数据放入栈里叫进栈(PUSH),相当于在扑克牌的在最上面放了一张新的扑克牌。
**出栈(POP):**将一个数据从栈里取出叫出栈(POP),相当于在扑克牌的在最上面拿走了一张扑克牌。
栈顶:常用寄存器ESP,ESP是栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
栈底:常用寄存器EBP,EBP是基址指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
需要注意的是,程序的栈是从进程地址空间的高地址向低地址增长的。
栈在生活中的例子:堆放的餐盘,只能按顺序取放,进栈就是将盘子放在最上面,出栈就是将最上面的盘子拿走。