每一个函数被调用时,都会为函数开辟一块空间,这块空间就称为栈帧。
首先,我们了解一下不同种类的寄存器:
(1)eax,ebx,ecx,edx :通用寄存器
(2)ebp:存放指向函数栈帧栈底的地址
(3)esp:存放指向函数栈帧栈顶的地址
(4)eip:程序计数器——保存程序当前正在执行指令的下一个指令的地址
接着我们以下面这段代码为例,深入到函数的调用过程中去:
#include <stdio.h>
#include <windows.h> int Add(int x, int y)
{
int z = ;
z = x + y;
return z;
} int main()
{
int a = ;
int b = ;
int ret = Add(a, b);
printf("a+b=%d\n", ret);
system("pause");
return ;
}
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOekV5TWpVeU16RXlNekExTXpjL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMlYwWTVVVnBZU25wYVdGcHNZMjFHZFZreVZUMHZabTl1ZEM4MVlUWk1OVXd5VkM5bWIyNTBjMmw2WlM4ME1EQXZabWxzYkM5Sk1FcENVV3RHUTAxQlBUMHZaR2x6YzI5c2RtVXZOekF2WjNKaGRtbDBlUzlUYjNWMGFFVmhjM1E9LmpwZw%3D%3D.jpg?w=700&webp=1)
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOekV5TWpVeU16RXlNalV6TXpFL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMlYwWTVVVnBZU25wYVdGcHNZMjFHZFZreVZUMHZabTl1ZEM4MVlUWk1OVXd5VkM5bWIyNTBjMmw2WlM4ME1EQXZabWxzYkM5Sk1FcENVV3RHUTAxQlBUMHZaR2x6YzI5c2RtVXZOekF2WjNKaGRtbDBlUzlUYjNWMGFFVmhjM1E9LmpwZw%3D%3D.jpg?w=700&webp=1)
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOekV5TWpVeU16RXlNVGs1T1RjL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMlYwWTVVVnBZU25wYVdGcHNZMjFHZFZreVZUMHZabTl1ZEM4MVlUWk1OVXd5VkM5bWIyNTBjMmw2WlM4ME1EQXZabWxzYkM5Sk1FcENVV3RHUTAxQlBUMHZaR2x6YzI5c2RtVXZOekF2WjNKaGRtbDBlUzlUYjNWMGFFVmhjM1E9LmpwZw%3D%3D.jpg?w=700&webp=1)
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOekV5TWpVeU16RXlNVFUzTlRjL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMlYwWTVVVnBZU25wYVdGcHNZMjFHZFZreVZUMHZabTl1ZEM4MVlUWk1OVXd5VkM5bWIyNTBjMmw2WlM4ME1EQXZabWxzYkM5Sk1FcENVV3RHUTAxQlBUMHZaR2x6YzI5c2RtVXZOekF2WjNKaGRtbDBlUzlUYjNWMGFFVmhjM1E9LmpwZw%3D%3D.jpg?w=700&webp=1)
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOekV5TWpVeU16RXlNVEV3TWpnL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMlYwWTVVVnBZU25wYVdGcHNZMjFHZFZreVZUMHZabTl1ZEM4MVlUWk1OVXd5VkM5bWIyNTBjMmw2WlM4ME1EQXZabWxzYkM5Sk1FcENVV3RHUTAxQlBUMHZaR2x6YzI5c2RtVXZOekF2WjNKaGRtbDBlUzlUYjNWMGFFVmhjM1E9LmpwZw%3D%3D.jpg?w=700&webp=1)
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOekV5TWpVeU16RXlNRFkyTURRL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMlYwWTVVVnBZU25wYVdGcHNZMjFHZFZreVZUMHZabTl1ZEM4MVlUWk1OVXd5VkM5bWIyNTBjMmw2WlM4ME1EQXZabWxzYkM5Sk1FcENVV3RHUTAxQlBUMHZaR2x6YzI5c2RtVXZOekF2WjNKaGRtbDBlUzlUYjNWMGFFVmhjM1E9LmpwZw%3D%3D.jpg?w=700&webp=1)
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOekV5TWpVeU16RXhOVGt3TmpRL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMlYwWTVVVnBZU25wYVdGcHNZMjFHZFZreVZUMHZabTl1ZEM4MVlUWk1OVXd5VkM5bWIyNTBjMmw2WlM4ME1EQXZabWxzYkM5Sk1FcENVV3RHUTAxQlBUMHZaR2x6YzI5c2RtVXZOekF2WjNKaGRtbDBlUzlUYjNWMGFFVmhjM1E9LmpwZw%3D%3D.jpg?w=700&webp=1)
![[Android Pro] 深入理解函数的调用过程——栈帧 [Android Pro] 深入理解函数的调用过程——栈帧](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdllteHZaeTVqYzJSdUxtNWxkQzk0WDNCbGNuTmxkbVZ5WVc1alpTOWhjblJwWTJ4bEwyUmxkR0ZwYkhNdk56ZzRPVGMyTXpjPS5qcGc%3D.jpg?w=700&webp=1)
函数调用完成后,释放栈帧。
以上就是函数的整个调用过程