标签:堆栈 数据 原来 加法 nbsp 一段 需要 自己 loading
ESP寻址方式有弊端:
因此用到了EBP寻址:
ESP中存储的是当前栈顶指针的值。
EBP存储的是栈底指针的值
EBP寻址的思路:
(1)函数执行前先向栈中PUSH自己需要的参数:
此时栈顶指针存储的是当前call指令下一步指令的地址
(2)将EBP存入栈顶
这一步的作用是先存储EBP的值,在函数执行结束以后可以从这里拿回EBP的值
(3)让ESP与EBP相等,再让ESP减去需要的字节数。即可实现为当前函数开辟一个指定的空间
(4)执行函数操作
在如果函数内有PUSH操作以及数值操作,可以把用到的数值放到上面开辟的16字节的中。
同时以EBP为参考获取到传进来的参数值执行加法操作
(5) 函数体内的函数执行结束以后,让ESP回到原位,同时把EBP的值从栈中POP出来,这样整个函数执行结束后,ESP的值仍然指向的是CALL指令下一步指的地址。因此做到的堆栈平衡
(6)ESP回到原位,堆栈平衡
标签:堆栈 数据 原来 加法 nbsp 一段 需要 自己 loading
原文地址:https://www.cnblogs.com/codexlx/p/13258887.html