[Android Pro] 深入理解函数的调用过程——栈帧

Posted atom blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Android Pro] 深入理解函数的调用过程——栈帧相关的知识,希望对你有一定的参考价值。

cp : http://blog.csdn.net/x_perseverance/article/details/78897637

每一个函数被调用时,都会为函数开辟一块空间,这块空间就称为栈帧


首先,我们了解一下不同种类的寄存器

(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 = 0;  
          z = x + y;  
          return z;  
    }  
      
    int main()  
    {  
          int a = 10;  
          int b = 20;  
          int ret = Add(a, b);  
          printf("a+b=%d\n", ret);  
          system("pause");  
          return 0;  
    }  

 

 

 
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片
技术分享图片

技术分享图片技术分享图片

函数调用完成后,释放栈帧。

 

以上就是函数的整个调用过程

 

以上是关于[Android Pro] 深入理解函数的调用过程——栈帧的主要内容,如果未能解决你的问题,请参考以下文章

转深入理解递归函数的调用过程

Android.mk 函数

深入理解计算机

Android-深入理解Binder

逆向分析-之深入理解函数

深入理解递归函数的调用过程