函数调用的过程

1:栈帧
①:关于栈:
A:首先明确一点,栈是向下生长的,所谓的向下生长,即从高地址向低地址延伸。即变量从栈的高地址向低地址存储。

B:其次,介绍一组寄存器变量,ebp在未受改变时始终指向栈底,其作用常常用来寻址。

C:寄存器esp会随着数据的出栈和压栈而移动,在未受改变时始终指向栈顶。


2:函数的调用过程
见下图:   mainCRTStartup()函数调用main()函数;

(1):先将调用者 mainCRTStartup()函数的基址入栈,保存之前任务的信息。
(2):然后调用函数时将ebp指针移到 mainCRTStartup()函数所占内存空间的栈顶。作为新的基址即main( )函数【栈底】的基址来使用。
(3):随后在被调用者main()函数的栈底上开辟相应的空间,作为被调用者main()函数的栈空间。
(4):函数返回后  esp及移动到ebp处,恢复为调用者的栈顶。

你可能感兴趣的:(函数调用的过程)