LOADING

加载过慢请开启缓存 浏览器默认开启

函数调用堆栈详解

函数调用堆栈详解

img

image

当进程被加载到内存时,会被分成很多段

  1. 代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写,如果发生写操作则会提示segmentation fault
  2. 数据段:保存初始化的全局变量和静态变量,可读可写不可执行
  3. BSS:未初始化的全局变量和静态变量
  4. 堆(Heap):动态分配内存,向地址增大的方向增长,可读可写可执行
  5. 栈(Stack):存放局部变量,函数参数,当前状态,函数调用信息等,向地址减小的方向增长,可读可写可执行
  6. 环境/参数段(environment/argumentssection):用来存储系统环境变量的一份复制文件,进程在运行时可能需要。例如,运行中的进程,可以通过环境变量来访问路径、shell 名称、主机名等信息。该节是可写的,因此在缓冲区溢出(buffer overflow)攻击中都可以使用该段

栈帧的基本结构:

imag下面以一段代码来进行详解函数调用栈的过程

int sum(int _a,int _b)
{
    int c=0;
    c=_a+_b;
 
    return c;
}
 
 
int main()
{
    int a=10;
    int b=20;
 
    ret=sum(a,b);
 
    return 0;
}

imag

imag

从上面的流程图以后就是正常的sum函数执行传参然后函数操作的过程。就不过多赘述。