CSAPP:程序的机器级表示-4
本文最后更新于:2022年9月4日 下午
函数调用栈
栈的布局
- 由高地址向低地址增长
- 栈帧结构的两端由两个指针来指定
- 栈指针:%rsp,指向栈顶,地址更高
- 桢指针:%rbp,指向栈底,地址更低
出栈入栈
- pushq Src
- 从Src取操作数
- 将%rsp减8
- 将操作数写到%rsp指向的地址
- popq Dst
- 从%rsp中保存的地址值读取数值
- 将 %rsp加 8
- 将数值保存到Dst (必须是寄存器)
过程控制
- A函数调用B函数
- A是调用过程
- B是被调用过程
- 返回地址入栈
- 返回地址(return address)是紧随call指令的下一条指令的地址
- 过程返回ret
- 从栈中弹出返回地址
- 跳转到返回地址
- 要注意理解%rsp、%rip的变化
需要保存的几个状态
栈分配单位——帧,栈中单个过程实例的状态数据
- 参数
- 局部变量
- 返回地址
- call对应push操作(栈帧开辟)
- ret对应pop操作(栈帧回收)
这个地方还是要自己调试一遍程序,或者画一下过程图,分析一下地址和几个主要寄存器
CSAPP:程序的机器级表示-4
http://gls.show/p/3754ea8a/