20135130 王川东
计算机三个“法宝”:存储程序计算机、函数调用堆栈和中断机制
深入理解函数调用堆栈:
堆栈是C语言运行时必须的一个记录调用路径和参数的空间:
作用包括:
函数调用框架;
保存参数;
保存返回地址;
提供局部变量等等
相关寄存器:esp:堆栈指针
ebp:基址指针
push:栈顶地址减少4字节(32位),并将数值放入
pop:栈顶地址增加4字节
cs(代码段寄存器) : eip:总是指向下一条的指令地址
顺序执行:总是指向地址连续的下一条指令
跳转/分支:执行这样的指令的时候, cs : eip的值会根据程序需要被修改
call:将cs.eip的值压入栈顶,cs.eip指向调用函数的入口地址。
ret:从栈顶弹出原来保存在这里的cs.eip的值,放入cs.eip中。
例:call的执行过程:
参数传递与局部变量:
建立堆栈框架:push %ebp
mov %esp %ebp
拆除堆栈框架:mov %ebp %esp
pop %ebp
函数的返回值通过eax寄存器传递
mykernel实验:
CPU和内核代码共同实现了保存现场和恢复现场
实验过程:
执行结果:
进程的启动和进程的切换机制分析如图: