就是win32汇编定义局部变量时,用local语句,看反汇编代码时有这么几条:
1.push ebp
2.mov ebp,esp
3.add esp,fffffff8
4.mov eax,dword ptr[ebp-04](定义的变量)
......
......(剩下的变量)
leave
ret
第三条中的改变esp有什么用处啊,下面的语句都是对ebp而言的啊,第三条不要,对后面语句不是也没有影响吗?
请大牛们帮忙解答一下吧。(书上说是什么预留空间的作用,但是还是感觉第三句不要,丝毫没有影响吧?)
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
esp标记栈的位置,一般在函数的头部进行处理,定义局部变量里,编译器按局部变量的空间调整栈大小,如有4个int型(4字节),那么一般会add esp fffffff0,也就是-16,然后让ebp记住这个位置,对局部变量进行赋值时,比如ebp-4,ebp-8,按照位差,函数返回前,又进行清栈,esp又会变化以保持平衡。