20135324-信息安全系统设计基础第五周学习总结
学习重点:
一、栈帧结构
机器用栈来传递过程参数,存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。
%ebp为帧指针,而寄存器%esp为栈指针。当程序执行时,栈指针可以移动,因此大多数信息的访问都是相对于帧指针的。
Q的栈帧从保存的帧的值例如%esp开始,后面是保存寄存器的值。这个过程Q也用栈来保存其他不能放在寄存器中的局部变量。
二、转移控制
call指令:指明被调用过程起始的指令地址同跳转一样,调用可以直接也可以间接。
返回地址:在程序中紧跟在call后面的那条指令地址,当调用过程返回时,执行会从此处继续。
ret指令:从栈中弹出地址,并跳转到这个位置。
当使用这个指令时,可以使栈做好准备,栈指针要指向前面call指令存储返回地址的位置。
三、寄存器使用惯例
寄存器使用惯例:寄存器%eax、%edx和 %ecx被划分为调用者保存寄存器。当过程p调用Q时,可以覆盖这些寄存器,而不会破坏任何批所需要的数据
寄存器%ebx、%esi和%edi被划分为调用者保护寄存器,就是Q必须在覆盖这些寄存器的值之前,先把他们保存到栈中并在返回前恢复,因为以后p可 能会用到。
四、过程示例
swap_add编译的代码包括:“建立”——初始化栈帧;“主体”——执行过程的实际运算;“结束”——恢复栈的状态,以及过程返回。
五、递归过程
递归调用一个函数等于调用其他函数是一样的,但是栈规则提出了一种机制,每次函数调用都有它自己私有的状态信息存储:包括保存的返回位置、栈指针和被调用者保存寄存器的值。
六、使用GDB调试
实验楼 《深入理解计算机系统》 实验四
将c 转变为汇编语言: