Linux进程的栈和进程中函数的栈帧及其结构
2015-03-05 23:21
330 查看
主要理解了Linux进程的栈和函数的栈帧的区别和联系
上图中刻画的是一个Linux进程的结构图,其中本文想要关注的栈如上图所示是栈底在0xc0000000地址递减的一块进程内存区域
Linux系统中为每个进程分配的实际大小未做深究
Linux进程的栈的整体认知就是这么多,即
1)栈底在0xc0000000(并不需要栈底指针,函数的栈帧才需要栈底指针)
2)栈的增长方向,地址递减方向
3)栈顶指针esp
4)大小未知(不是本文关注的重点)
5)里面存放的内容是什么呢?
进程的栈中存放的是函数调用的栈帧
即另一个概念是上文中提到的函数的栈帧的概念及其与Linux进程栈的关系
函数的栈帧就在进程中的栈的结构和分配的地址空间及实际内存中
函数的栈帧整体的理解是:
1)ebp是函数栈帧的栈底
2)esp是栈顶(一个函数的活动记录就在ebp(高地址)和esp(低地址)之间)
3)一个进程的所有的函数的栈帧在调用此函数的时候建立,返回调用者后,被调函数的栈帧不再存在
4)所有的函数的栈帧的建立和消失是随着进程的执行而变化的一个动态过程
5)栈帧中存放的内容是什么呢?
栈帧中存放的内容一般包括以下几个方面的内容:
1)函数的返回地址和参数
2)临时变量:包括函数的非静态局部变量和编译器自动生成的其他变量
3)保存的上下文:包括在函数调用前后需要保证不变的寄存器值
进程中的函数在进程提供的栈中要解决的是调用者和被调者的关系
1)如何从调用者进入被调者?call
2)如何从被调者返回调用者?ret
3)调用者如何支配被调者(被调函数参数传递)?参数
4)被调者的价值如何体现(返回值的传递)?寄存器eax、edx
其中还有两个问题值得去看
1)被调函数返回值的传递方式
2)函数的调用惯例
上图中刻画的是一个Linux进程的结构图,其中本文想要关注的栈如上图所示是栈底在0xc0000000地址递减的一块进程内存区域
Linux系统中为每个进程分配的实际大小未做深究
Linux进程的栈的整体认知就是这么多,即
1)栈底在0xc0000000(并不需要栈底指针,函数的栈帧才需要栈底指针)
2)栈的增长方向,地址递减方向
3)栈顶指针esp
4)大小未知(不是本文关注的重点)
5)里面存放的内容是什么呢?
进程的栈中存放的是函数调用的栈帧
即另一个概念是上文中提到的函数的栈帧的概念及其与Linux进程栈的关系
函数的栈帧就在进程中的栈的结构和分配的地址空间及实际内存中
函数的栈帧整体的理解是:
1)ebp是函数栈帧的栈底
2)esp是栈顶(一个函数的活动记录就在ebp(高地址)和esp(低地址)之间)
3)一个进程的所有的函数的栈帧在调用此函数的时候建立,返回调用者后,被调函数的栈帧不再存在
4)所有的函数的栈帧的建立和消失是随着进程的执行而变化的一个动态过程
5)栈帧中存放的内容是什么呢?
栈帧中存放的内容一般包括以下几个方面的内容:
1)函数的返回地址和参数
2)临时变量:包括函数的非静态局部变量和编译器自动生成的其他变量
3)保存的上下文:包括在函数调用前后需要保证不变的寄存器值
进程中的函数在进程提供的栈中要解决的是调用者和被调者的关系
1)如何从调用者进入被调者?call
2)如何从被调者返回调用者?ret
3)调用者如何支配被调者(被调函数参数传递)?参数
4)被调者的价值如何体现(返回值的传递)?寄存器eax、edx
其中还有两个问题值得去看
1)被调函数返回值的传递方式
2)函数的调用惯例
相关文章推荐
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- Linux进程的创建函数fork()及其fork内核实现解析
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- Linux进程的创建函数fork()及其fork内核实现解析【转】
- 【归纳总结】Unix/linux下的进程管理(二):创建进程的函数及其应用、对比
- 网络设备发送队列相关数据结构及其创建函数 (linux网络子系统学习 第十节 )
- Linux进程学习之exit()和_exit()函数
- Linux进程学习之exit()和_exit()函数
- Linux网络编程常用信息 结构 格式化 函数 等
- Linux进程间通讯所使用的系统调用函数
- linux ioctl函数及其驱动和应用程序注意事项
- Linux0.11进程创建函数fork()
- Linux中进程结构描述符
- Linux系统进程控制编程(六)——wait和waitpid函数
- linux-2.6.32.6源码目录结构分析及其driver所占比重
- Linux进程函数大全
- Linux下的时间相关结构和函数
- Linux进程函数集合
- linux进程的几个用户id及其转换