这一章中先以如下代码来讨论一下函数调用的大致过程:
解释:
首先明确一点:
在函数执行的过程中,变量,参数,地址等都是放到栈中:
而且需要注意的是:
栈的栈底是在高地址,每一次入栈,栈指针寄存器ESP都会 -=
Call指令 会将Call指令的下一条指令的地址入栈,这条保存的数据被称为返回地址
Ret指令 会将目前ESP所指向的地址,其保存的数据放回到EIP(程序计数器)中
然后EIP在不断地取指,执行
注意每一次执行Ret时,都保证ESP目前指向的是当时入栈的返回地址(如果不是的话当然会出错了)
这样保证了当函数调用返回时,可以延续上一个函数中继续执行
返回值 (即函数return 后面跟着的变量)都是保存到EAX中的
标签:调用,入栈,ESP,函数调用,地址,指令,过程,函数 From: https://www.cnblogs.com/cilinmengye/p/17347400.html