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小时