知识点: CALL框架 EBP寄存器 栈底指针 ESP寄存器 栈顶指针 一、EBP栈底指针 EBP是一个特殊的寄存器,通过EBP+偏移量 可以访问CALL里边的局部变量。它的低16位叫BP。//EAX和AX的关系 二、ESP栈顶指针 ESP栈顶指针与EBP构成的一段空间大小,一般就是本CALL局部变量的空间大小总和。ESP指针配合EBP使用。//SP 三、代码分析 void fun1(void) { //0401000 /$ 55 PUSH EBP //保存栈环境或者叫保存EBP指针 //0401001 |. 8BEC MOV EBP,ESP //0401003 |. 5D POP EBP //恢复EBP指针 //0401004 . C3 RETN } void fun2(void) { int a; int b=5; } void fun3(void) { fun2(); } 总结: 1、每个CALL会分配一个独立的栈段空间,供局部变量使用. 栈段空间大小一般要大于局部变量所需空间大小之和 ebp-esp=栈段空间大小。 2、CALL栈平衡。进CALL前与出CALL后 EBP和ESP的值不变。