<一>从指令角度了解函数堆栈调用过程

乎语百科 189 0

代码

点击查看代码
#include <iostream>
using namespace std;
int sum(int a,int b){
	int temp=0;
	temp=  a +b;
	return temp;
}

int main(){
	int a =10;
	int b=20;
	int ret =sum(a,b);
	return 0;
}

以上代码考虑2个问题: 问题1:main函数调用sum,sum执行完成以后,怎么知道回到哪个函数中? 问题2:sum函数执行完后,回到main后,怎么知道从哪一行指令继续执行的? //------------------------------------------------------------------------------------------------------------------

<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 函数参数压栈 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 函数参数压栈 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 下一条汇编指令地址入栈 <一>从指令角度了解函数堆栈调用过程 //------------------------------------------------------------------------------------------------------------------ main函数栈底指针入栈 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 移动ebp,进入被调函数 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 为sum函数开辟函数栈帧

<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 将返回值放入寄存器 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 回退esp栈指针 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 将ebp指回main函数栈底 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------ 取出下一条执行的汇编指令地址并执行 <一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

<一>从指令角度了解函数堆栈调用过程

此时 esp ,ebp 又指向了main函数的栈底指针和栈顶指针 //------------------------------------------------------------------------------------------------------------------

<一>从指令角度了解函数堆栈调用过程

标签:

留言评论

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~