栈帧

函数的调用过程(栈帧)
我们先来了解一些基本的概念:
1.main函数是函数,但不是第一个被调用的函数,Startup是第一个函数,Startup调用main函数。
2.栈的特点:先进后出,后进先出。比如说:枪,装羽毛球的筒都是栈结构。
3.认识两个操作:push(进栈)和pop(出栈),不管是进栈还是出栈,都是从一个入口(栈顶)进出,所以栈顶移动的也会更加频繁。
4.认识几种寄存器:EBP(栈底)、ESP(栈顶)、EIP(程序计数器:放当前正在执行的下一条指令的地址)、状态寄存器(例如’/0’操作)。
5.汇编调用call的作用:(1)保存正在执行的下条指令的地址,保存上一个栈帧的EBP和ESP可以返回(push:栈中保存);(2)跳转至目标函数,通过调整EIP(jmp:命令跳转)。
6.汇编中用ret的两个作用:(1)pop出返回值;(2)修改EIP(和call的作用相反)。
7.在函数内部定义的变量都在该函数的栈帧中,所以这些变量具有临时性,会被释放(标记无效即可)。新旧变量之间通过创建临时变量来改变。
8.常规变量通过寄存器返回,不受栈帧影响,所以会一直存在,不会随栈帧被释放。
9.形参实例化从右到左的顺序,例如:先a后b->先b后a创造变量,开辟空间。
10.每次函数调用都是一个过程,该过程我们称为函数的调用过程,在这个过程中要为函数开辟栈空间,用于本次函数的调用中临时变量的保存、现场保护。这块栈空间我们称之为函数栈帧。
11.函数调用:
这里写图片描述

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭