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

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

教材学习内容总结

1. 寻址方式历史

(1)DOS时代的平坦模式

不区分用户空间和内核空间,很不安全

(2)8086的分段模式

(3)IA32的带保护模式的平坦模式

2. 程序编码

(1)编译

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

    gcc命令调用一系列程序将源代码转换成可执行代码:
    - C预处理器 扩展源代码,插入#include命令指定的文件,扩展#define声明指定的宏。(.i)
    - 编译器 产生两个源代码的汇编代码。(.s)
    - 汇编器 将汇编代码转化成二进制目标代码(.o)
    - 连接器 将两个目标代码与实现库函数的代码合并,并产生最终的可执行代码文件。

(2)两种抽象

计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节。对于机器级编程来说,两种抽象尤为重要:

  • 机器级程序的格式和行为,定义为 ISA :指令集体系结构。

      ISA,定义了处理器状态,指令格式,以及每条指令对状态的影响。
      处理器的硬件并发的执行许多指令,但是可以采取措施保证整体行为与ISA指定的顺序整形完全一致。
    
      解决的问题:
      	指令的编码方式(即如何编码)
      	操作数和操作结构的存放位置
      	数据的类型和大小
      	支持哪些操作
      	下一条指令的地址
    
  • 机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字节数组。

(3)IA32机器代码

一些通常对C语言程序员隐藏的机器代码在IA32中是可见的:

  • 程序计数器(在IA32中,通常称为“PC”,用%eip表示)

指示将要执行的下一条指令在存储器中的地址。

  • 整数寄存器

包含8个命名的位置,分别存储32位的数值,这些寄存器可以存储地址(对应C语言的指针)或整数数据,有的寄存器被用来记录某些重要的程序状态,其他的寄存器用来保存临时数据,例如过程的局部变量和函数的返回值。

  • 条码寄存器

保存着最近执行的算术或逻辑指令的状态信息,他们用来实现控制或数据流中的条件变化。

  • 浮点寄存器

一组浮点寄存器存放浮点数据

一条机器指令只执行一个非常基本的操作

代码调试中的问题和解决过程

  • 这周主要问题在实验中遇到,已在实验博客中详述。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

没有进行考试。

感想

本章的内容很多,由于自己预留的时间不太充裕导致看书时间较短,对课本上的理解不足,博客写的不充分,要好好计划好时间。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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
  • 计划学习时间:10小时

  • 实际学习时间:6小时

原文地址:https://www.cnblogs.com/rhl20155319/p/7711371.html