20145318 《信息安全系统设计基础》第5周学习总结

20145318 《信息安全系统设计基础》第5周学习总结

教材学习内容总结

寻址方式历史

  • DOS时代的平坦模式:不区分用户空间和内核空间,很不安全。

  • 8086的分段模式

  • IA32的带保护模式的平坦模式

程序编码

  • 编译:gcc -01 -o p p1.c,-01:表示使用第一级优化。通常提高优化级别会使最终程序运行得更快,但是编译时间可能会变长,用调试工具对代码进行调试会更困难。(实际中,第二级优化-02被认为是较好的选择)

  • 两种抽象:

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

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

机器级代码

  • 指令集体系结构(ISA):机器级程序的格式和行为,定义了处理器状态、指令的格式以及每条指令对状态的影响

  • 虚拟地址:使用的存储器地址

  • 程序计数器(PC):指示下一条指令在存储器中的地址

  • 寄存器文件:8个命名的位置,分别存储32位的值,可以存储地址或整数数据

  • 条件码寄存器:实现控制或数据流中的条件变化

  • 浮点寄存器

栈帧结构

  • IA32用程序栈支持过程调用

  • 机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复

  • 栈帧:为单个过程分配的栈

  • %ebp为帧指针、%esp为栈指针,栈指针可以移动,大多数信息访问相对于帧指针

访问信息

  • 一个IA32的中央处理器单元包含一组8个存储32位数值的寄存器。所有八个寄存器都可以作为16位(字)或32位(双字)来访问:

    • %esi,%edi可以用来操纵数组

    • %esp,%ebp用来操纵栈帧

    • 可以独立访问前四个寄存器的两个低位字节(后向兼容)

    • 32位的%eax,16位的%ax,8位的%ah,%al都是独立的

操作数三种类型:

  • 立即数,即常数值

  • 寄存器,表示某个寄存器的内容

  • 存储器,根据计算出来的地址(有效地址)访问某个存储器位置

条件码

  • CF进位标志,检查无符号数的溢出

  • ZF零标志

  • SF符号标志

  • OF溢出标志

  • 除了只设置条件码而不更新目标寄存器外,CMP与SUB行为相同,TEST与ADD行为相同

访问条件码

  • 条件码使用方法:

    • 根据条件码的组合,设置字节为0或1
    • 条件跳转到程序其他部分
    • 条件传送数据
  • SET指令的目的操作数是8个单字节寄存器元素之一或是存储一个字节的存储器位置

问题和解决过程

  • case的序号对应跳转表中的序号,从0开始。

本周代码托管截图

其他(感悟、思考等,可选)

  • 这一周是汇编语言,之前学过感觉比较熟悉。汇编是最接近计算机硬件的语言,了解后对掌握计算机程序运行等方面有提高。
  • 也该多花时间学习了,学习带来的充实感是非常好的。

参考资料

posted on 2016-10-16 21:20  20145318赵一  阅读(198)  评论(1)    收藏  举报

导航