深入理解栈

栈:保存了一个函数调用所需要维护的信息,常被称为堆栈帧或活动记录.

ebp:帧指针,固定不变,可以用来定位函数活动记录中的各个数据。ebp直接指向的是调用函数
前ebp(即下图的old ebp)的值;在函数返回时,ebp可以通过读取这个值恢复到调用前的值。 

intel下函数调用:
  • 参数压栈(从右向左)
  • 当前指令的下一条指令地址压栈
  • 跳转到函数体执行
其中第2,3步由指令call一起执行,编译器可能要求某些寄存器在调用前后保持不变,或者生成
的临时变量都需要压栈。

多级调用栈布局
PS:Debug模式下未初始化的局部变量出现"烫"或者"屯"原因->栈空间给变量分配空间的每个字节被初始化为0xCC或者0xCD;
   编译器这样做有助于判断一个变量是否初始化!
posted on 2011-12-10 22:52  Seiyagoo  阅读(360)  评论(1编辑  收藏  举报