2017-2018-1 20155304 《信息安全系统设计基础》第五周学习总结
教材学习内容总结
机器级代码
- ISA指令集体系结构,机器级程序的格式和行为,它定义了处理器状态、指令的格式以及每条指令对状态的影响。
- 机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字节数组。
- 操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器存储器中的物理地址。
- 用objdump -d xxx.o -o xxx.s 反汇编
Ltme
1.三种操作数:
- 立即数:常数值。表示为$c标准表示的整数。
- 寄存器:表示某个寄存器的内容。
- 存储器:根据计算出来的地址访问某个存储器位置
2.数据传送指令
栈的特点
a、 遵循“后进先出”的原则b、 push压栈,pop出栈c、 栈顶:总是从这端插入和删除元素d、 栈顶元素的地址是最低的e、 栈指针%esp保存着栈顶元素的地址
3.数据传送示例
局部变量通常保存在寄存器中;寄存器访问比存储器访问要快的多。
过程
- 栈帧结构
机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。 最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。
2.转移控制
- call指令
call指令有一个目标,即指明被调用过程起始的指令地址。 call指令的效果是将返回地址入栈。并跳转到被调用过程的起始处。
- ret指令
ret指从栈中弹出地址,并跳转到这个位置。ret指令返回到call指令后的那条指令。
- leave指令
leave指令可以使栈做好返回的准备 等价于:
movl %ebp,%esp popl %ebp
3.寄存器使用惯例
程序寄存器组是唯一能被所有过程共享的资源。惯例是为了防止一个过程P调用另一个过程Q时寄存器中的值被覆盖
保存某值的两种方式
①由调用者保存。在调用之前就压进栈。
②由被调用者保存,在刚被调用的时候就压进栈,并在返回之前恢复。
教材学习中的问题和解决过程
练习题3.34:根据GCC产生的汇编代码,填写补充C源代码:
int rfun(unsigned x){
if (x==0)
return 0;
unsigned nx = x>>1;
int rv = rfun(nx);
return (x&0x1)+rv;
}
代码调试中的问题和解决过程
无
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 47/100 | 1/1 | 10/10 | |
第二周 | 180/200 | 1/1 | 10/10 | |
第三周 | 200/300 | 1/1 | 10/10 | |
第五周 | 190/300 | 1/1 | 10/10 |