2017-2018-1 20155217 《信息安全系统设计基础》第五周学习总结
Posted on 2017-10-22 14:37 20155217杨笛 阅读(152) 评论(1) 编辑 收藏 举报2017-2018-1 20155217 《信息安全系统设计基础》第五周学习总结
教材学习内容总结
X86 寻址方式经历了一下三代:
DOS时代的平坦模式,不区分用户空间和内核空间,很不安全。
8060的分段模式
IA32的带保护模式的平坦模式
程序编程:
gcc -01 -o p p1.c
-
-01 表示使用第一级优化。优化的级别与编译时间和最终产生代码的形式都有关系,一般认为第二级优化-02 是较好的选择。
-
-o 表示将p1.c编译后的可执行文件命名为p
机器级编程的两种抽象
-
指令集结构ISA
是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。 -
机器级程序使用的存储器地址
是虚拟地址看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。
执行汇编命令:gcc –s xxx.c –o xxx.s
反汇编命令:objdump –d xxx
64位处理器得到32代码的命令:gcc –m32 –s xxx.c
访问信息
- 三种操作数:立即数、寄存器、存储器
- 数据传送指令:
栈的特点
a、 遵循“后进先出”的原则
b、 push压栈,pop出栈
c、 栈顶:总是从这端插入和删除元素
d、 栈顶元素的地址是最低的
e、 栈指针%esp保存着栈顶元素的地址
- 数据传送示例:
局部变量通常保存在寄存器中;
寄存器访问比存储器访问要快的多。
算术和逻辑操作
- 四组操作:
-
加载有效地址:将有效地址写入目的操作数,目的操作数必须是寄存器。
-
一元操作:只有一个操作数,可以是寄存器也可是存储器位置。
-
二元操作:源操作数是第一个,可以是立即数、寄存器、存储器 ;目的操作数是第二个,可以是寄存器、存储器;两个不能同时为存储器。
- 特殊的算术操作
控制
- 条件码
CF:进位标志
ZF:零标志
SF:符号标志
OF:溢出标志
- 循环结构的三种形式:
do-while:先执行循环体语句,再执行判断,循环体至少执行一次。
while: 把循环改成do-while的样子,然后用goto翻译
for: 把循环改成do-while的样子,然后用goto翻译
过程
- 栈帧结构:机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。
最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。 - 转移控制:call指令、ret指令、leave指令
- 寄存器使用惯例:
%eax,%edx,%ecx 调用者保存寄存器
%ebx,%esi,%edi 被调用者保存寄存器
%ebp,%esp 保持寄存器
教材学习中的问题和解决过程
- 使用gcc –S –o main.s main.c -m32命令编译成汇编代码:
-
通过cat命令查看汇编代码
-
删除gcc产生代码中以"."开头的编译器指令
代码托管
本周结对学习情况
- [20155236](http://www.cnblogs.com/fcgfcgfcg/)
- 结对照片
- 结对学习内容
- 一个IA32的中央处理器单元包含一组8个存储32位数值的寄存器。所有八个寄存器都可以作为16位(字)或32位(双字)来访问:
%esi,%edi可以用来操纵数组
%esp,%ebp用来操纵栈帧
64位的%rax,32位的%eax,16位的%ax,8位的%ah,%al都是独立的
其他(感悟、思考等,可选)
明显感觉这周比上周学习的认真多了,与多敲代码是密不可分的,增加的练习对掌握知识很有作用,希望自己能坚持下去。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)