20135324-信息安全系统设计基础第五周学习总结

 

学习重点:

一、栈帧结构

机器用栈来传递过程参数,存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。

%ebp为帧指针,而寄存器%esp为栈指针。当程序执行时,栈指针可以移动,因此大多数信息的访问都是相对于帧指针的。

Q的栈帧从保存的帧的值例如%esp开始,后面是保存寄存器的值。这个过程Q也用栈来保存其他不能放在寄存器中的局部变量。

二、转移控制

call指令:指明被调用过程起始的指令地址同跳转一样,调用可以直接也可以间接。

返回地址:在程序中紧跟在call后面的那条指令地址,当调用过程返回时,执行会从此处继续。

ret指令:从栈中弹出地址,并跳转到这个位置。

当使用这个指令时,可以使栈做好准备,栈指针要指向前面call指令存储返回地址的位置。

三、寄存器使用惯例

寄存器使用惯例:寄存器%eax、%edx和 %ecx被划分为调用者保存寄存器。当过程p调用Q时,可以覆盖这些寄存器,而不会破坏任何批所需要的数据

                      寄存器%ebx、%esi和%edi被划分为调用者保护寄存器,就是Q必须在覆盖这些寄存器的值之前,先把他们保存到栈中并在返回前恢复,因为以后p可  能会用到。

四、过程示例

swap_add编译的代码包括:“建立”——初始化栈帧;“主体”——执行过程的实际运算;“结束”——恢复栈的状态,以及过程返回。

 

五、递归过程

递归调用一个函数等于调用其他函数是一样的,但是栈规则提出了一种机制,每次函数调用都有它自己私有的状态信息存储:包括保存的返回位置、栈指针和被调用者保存寄存器的值。

六、使用GDB调试

 

实验楼 《深入理解计算机系统》 实验四

将c 转变为汇编语言:

posted on 2015-10-10 16:59  yysw  阅读(137)  评论(1编辑  收藏  举报

导航