Linux学习笔记stack and function calling conventions—下篇
发布时间
阅读量:
阅读量
栈与函数调用惯例(又称调用约定)— 正篇
基于前篇笔记的内容上,在此基础上本文进一步阐述栈与函数调用约定的相关知识。
1. 函数调用的栈帧结构
IA32架构采用栈结构来实现函数调用。机器利用栈机制传递函数参数、保存返回地址以及寄存器状态,并存储本地变量等细节信息。每个单独函数调用 dedicated stack portion 被称为 栈帧 (stack frame)。两个关键寄存器分别定位 栈帧 的起始与顶端:%ebp 作为 帧指针 (frame pointer),固定指向当前 栈帧 的基址;而 %esp 作为 栈顶 指针 (stack top pointer),可变地指示当前 栈帧 的顶端位置。在程序运行过程中,在处理指令时会动态调整这两个寄存器的内容以管理内存布局和数据访问路径
下图给出了栈帧的通用结构。

参考前篇笔记关于进程虚拟内存管理和上图所示的程序运行框架图的内容可以看出:在经典的类UNIX操作系统架构中,默认情况下默认分配给程序运行时使用的内存区域——即堆区——通常是向上增长延伸的;而当执行压栈操作时(即push指令),该区域的实际起始地址
全部评论 (0)
还没有任何评论哟~
