博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

教材学习内容总结

X86 寻址方式经历了一下三代:

DOS时代的平坦模式,不区分用户空间和内核空间,很不安全。
8060的分段模式
IA32的带保护模式的平坦模式

程序编程:

gcc -01 -o p p1.c

  1. -01 表示使用第一级优化。优化的级别与编译时间和最终产生代码的形式都有关系,一般认为第二级优化-02 是较好的选择。

  2. -o 表示将p1.c编译后的可执行文件命名为p

机器级编程的两种抽象
  • 指令集结构ISA是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。

  • 机器级程序使用的存储器地址是虚拟地址看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。

执行汇编命令:gcc –s xxx.c –o xxx.s
反汇编命令:objdump –d xxx 
64位处理器得到32代码的命令:gcc –m32 –s xxx.c

访问信息

  1. 三种操作数:立即数、寄存器、存储器
  2. 数据传送指令:
栈的特点
a、 遵循“后进先出”的原则
b、 push压栈,pop出栈
c、 栈顶:总是从这端插入和删除元素
d、 栈顶元素的地址是最低的
e、 栈指针%esp保存着栈顶元素的地址
  1. 数据传送示例:
局部变量通常保存在寄存器中;
寄存器访问比存储器访问要快的多。

算术和逻辑操作

  1. 四组操作:
  • 加载有效地址:将有效地址写入目的操作数,目的操作数必须是寄存器。

  • 一元操作:只有一个操作数,可以是寄存器也可是存储器位置。

  • 二元操作:源操作数是第一个,可以是立即数、寄存器、存储器 ;目的操作数是第二个,可以是寄存器、存储器;两个不能同时为存储器。

  1. 特殊的算术操作

控制

  1. 条件码
CF:进位标志 
ZF:零标志
SF:符号标志
OF:溢出标志
  1. 循环结构的三种形式:
do-while:先执行循环体语句,再执行判断,循环体至少执行一次。
while: 把循环改成do-while的样子,然后用goto翻译 
for: 把循环改成do-while的样子,然后用goto翻译

过程

  1. 栈帧结构:机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。
    最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。
  2. 转移控制:call指令、ret指令、leave指令
  3. 寄存器使用惯例:
%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小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料