2017-2018-1 20155304 《信息安全系统设计基础》第五周学习总结

2017-2018-1 20155304 《信息安全系统设计基础》第五周学习总结

教材学习内容总结

机器级代码

  • ISA指令集体系结构,机器级程序的格式和行为,它定义了处理器状态、指令的格式以及每条指令对状态的影响。
  • 机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字节数组。
  • 操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器存储器中的物理地址。
  • 用objdump -d xxx.o -o xxx.s 反汇编
    image

Ltme

1.三种操作数:

  • 立即数:常数值。表示为$c标准表示的整数。
  • 寄存器:表示某个寄存器的内容。
  • 存储器:根据计算出来的地址访问某个存储器位置

2.数据传送指令

栈的特点

a、 遵循“后进先出”的原则b、 push压栈,pop出栈c、 栈顶:总是从这端插入和删除元素d、 栈顶元素的地址是最低的e、 栈指针%esp保存着栈顶元素的地址

3.数据传送示例

局部变量通常保存在寄存器中;寄存器访问比存储器访问要快的多。

过程

  1. 栈帧结构

机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。 最顶端的栈帧以两个指针界定,寄存器%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

参考资料

posted @ 2017-10-22 14:40  田宜楠20155304  阅读(185)  评论(0编辑  收藏  举报