当前位置:文档之家› 来聊聊函数是怎么传入参数的

来聊聊函数是怎么传入参数的

来聊聊函数是怎么传入参数的
 今天,我们来聊聊函数是怎幺传入参数的,我们都知道,当一个函数调用使用少量参数(ARM上是少于等于4个)时,参数是通过寄存器进行传值(ARM上是通过r0,r1,r2,r3),而当参数多于4个时,会将多出的参数压入栈中进行传递(其实在函数调用过程中也会把r0,r1,r2,r3传递的参数压入栈),具体
是什幺实现的呢,下面我们来具体看看。

 函数栈
 首先我们需要了解一下linux下一个进程的内存地址空间是如何布局的,
在linux中,0~3G的虚拟地址为进程所有,3G~4G由内核所使用,每一个进
程都有自己独立的0~3G内存地址空间。

当进程进行函数调用时,我们都知
道传入被调用函数的参数是通过栈进行操作的,这里我们只需要简单了解一
下linux的内存地址空间中的栈是自顶向下生长的,就是栈底出于高地址处,栈顶出于低地址处。

 好的,简单了解了内存地址空间的栈后,我们还需要简单了解一下EBP
和ESP这两个寄存器,EBP是用保存栈低地址的,而ESP用于保存栈顶地址,而每一次函数调用会涉及到一个栈帧,栈帧结构如下图。

相关主题