20145233 《信息安全系统设计基础》期中复习总结

20145233 《信息安全系统设计基础》期中复习总结

教材学习内容总结

本周的学习任务是将前面几章的内容做以复习,并且来总结一下之前每次考试的错误。
-期中复习考试资料

一、常用命令总结

man -k:

常用来搜索,结合管道使用。例句如下:

man -k k1 | grep k2 | grep 2

搜索同时含有k1和k2,且属于系统调用。

最后的数字意味着帮助手册中的区段,man手册共有8个区段,最常用的是123,含义如下:

1.Linux
2.系统调用
3.c语言

但是当单独用man语句的时候,想查看其中的单独某个区段内的解释时,用法是这样的:

man 3 printf
即查找c语言中printf的用法。

grep -nr

这条语句可以用来查找关键字,全文搜索,并且可以直接查找文件内的内容。其中:

n:为显示行号
r:为递归查找
例如,如果想查找某个宏,我们已知宏保存在include文件夹中,所以可以使用下列语句:

grep -nr XXX /usr/include(XXX为所要找的宏)

cheat

cheat是非常好用的“打小抄”搜索工具,能够方便的告诉你你想要的内容。

sort命令

将文本文件内容加以排序。可针对文本文件的内容,以行为单位来排序。
参数:

m:将几个排序好的文件进行合并。
n:依照数值的大小排序
Linux Bash中,ls . | sort 命令的功能是(显示当前目录内容并排序)

二、常用工具

vim

vim是一种非常好用的编辑器,总共有六种基本模式,最常用的是普通模式、插入模式和命令行模式。需要熟悉这三种模式之间的切换方式:

普通→插入: i 或 a 
插入→普通: Esc 或 Ctrl + [
普通→命令行: :
命令行→普通:Esc 或 Ctrl + [

常用的进入、保存和退出指令:

进入:vim 文件名
保存:命令行模式 :w
退出:命令行模式 :q

常用动作:

删除:dd删除整行
复制:yy复制整行
粘贴:p

gcc

常用选项

-c      只编译不链接,生成目标文件.o
-S      只编译不汇编,生成汇编代码
-E      只进行预编译,不做其他处理
-g      在可执行程序中包含标准调试信息
-o file 将file文件指定为输出文件
-v      打印出编译器内部编译各过程的命令行信息和编译器的版本
-I dir  在头文件的搜索路径列表中添加dir目录

编译过程

预处理:gcc –E hello.c –o hello.i;  gcc –E调用cpp 生成中间文件
编 译:gcc –S hello.i –o hello.s;  gcc –S调用ccl 翻译成汇编文件
汇 编:gcc –c hello.s –o hello.o;  gcc -c 调用as 翻译成可重定位目标文件
链 接:gcc hello.o –o hello ;      gcc -o 调用ld**   创建可执行目标文件

-o后面是接的你给生成的文件指定的名字,如果不指定,则默认为a.out

在命令行上运行这个可执行目标文件需要输入它的名字:

./a.out
其中./代表当前目录。

gdb

注意:使用GCC编译时要加“-g”参数,然后才能够用gdb调试

GDB最基本的命令有:

gdb programm(启动GDB)
l   查看所载入的文件
b   设断点
info b  查看断点情况
run 开始运行程序
bt  打印函数调用堆栈
p   查看变量值
c   从当前断点继续运行到下一个断点
n   单步运行(不进入)
s   单步运行(进入)
quit 退出GDB

四种断点:

1.行断点
b [行数或函数名] <条件表达式>
2.函数断点
b [函数名] <条件表达式>
3.条件断点
b [行数或函数名] <if表达式>
4.临时断点
tbreak [行数或函数名] <条件表达式>

locate

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

命令格式:locate [选择参数] [样式]

命令参数:
-e:将排除在寻找的范围之外
-1:如果是1则启动安全模式,在安全模式下,使用者不会看到权限无法看到的档案。这会使速度减慢,因为 locate必须至实际的档案系统中取得档案的权限资料
-f:将特定的档案系统排除在外,例如我们没有到必要把proc档案系统中的档案放在资料库中
-q:安静模式,不会显示任何错误讯息
-n:至多显示 n个输出
-r:使用正规运算式 做寻找的条件
-o:指定资料库存的名称
-d:指定资料库的路径
-h:显示辅助讯息
-V:显示程式的版本讯息

三、课本重要思想

第一章 计算机系统漫游

这一章介绍了一些基本的概念,是以后各章的总括,提到的内容都在之后的各章中拆开细讲,我认为这章最重要的就是一句话:

信息=位+上下文

计算机中的信息都是有二进制数字表达的,而因为这些二进制位所处的位置不同,是有符号数还是无符号数,是大端法还是小端法,由于具体的解释不同,造成的结果也不同。

之后的学习就是如何读写位,和上下文如何对应。

第二章 信息的表示和处理

这章里我觉得最容易混淆的是小端法和大端法。常用小端法,巧记方式是“高对高,低对低”,但是同时要注意字节在存放的时候的高低与我们惯常认知中的高低位的关系,以及一串数据中几位代表一个字节:

一个字节是8位,也就是两位十六进制数。

然后是整数中,有符号数和无符号数的表示,补码表示,位运算和逻辑运算,溢出、截断和扩展;

浮点数中,二进制小数,最重要的是IEEE小数:

IEEE浮点标准:

  • 用V=(-1)^s X 2^E X M 来表示一个数:
  • 符号:s决定这个数是正还是负。0的符号位特殊情况处理。
  • 阶码:E对浮点数加权,权重是2的E次幂(可能为负数)
  • 尾数:M是一个二进制小数,范围为12-ε或者01-ε(ε=1/2的n次幂)

编码规则:

  • 单独符号位s编码符号s,占1位
  • k位的阶码字段exp编码阶码E
  • n位小数字段frac编码尾数M(同时需要依赖阶码字段的值是否为0)

两种精度

  • 单精度(float),k=8位,n=23位,一共32位;
  • 双精度(double),k=11位,n=52位,一共64位。

三种被编码情况

  • 规格化的
  • 非规格化的
  • 特殊值

第三章 程序的机器级表示

这一章和之前学习过的汇编很像,需要注意的就是寻址方式和几个操作,mov,push,pop,leal,还有跳转指令、控制转移指令等等。

第四章 处理器体系结构

这章里学习的是一个相对简单的处理器Y86,指令集比起IA32省略了很多。学习中我觉得一个比较不容易掌握,做题时需要反复查阅的是:

指令的字节级编码

Y86的顺序实现

第六章 存储器层次结构

我觉得第六章对于我来说就是其中包含的很多知识点,其中存储技术和局部性是比较重要的。里面有很多关于存储空间的计算。这些计算包含了对于知识的理解。

第七章 链接

第七章其中的链接主要讲的是静态链接以及共享库。

静态库
静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文 件);链接阶段,选择静态库,后缀名为“.a”;选择动态库,后缀名为“.so”。
静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o
静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx//链接到静态库
注意:
-L:在库文件的搜索路径列表中添加dir目录
-l:在头文件的搜索路径列表中添加dir目录

共享库
共享库的生成:
gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
共享库的使用:gcc -o main main.c -L. -lxxx
注册共享库的方法:将库文件直接复制到/lib或者/usr/lib目录下: cp (lib+name).so /lib

收获

  • 本学期学习Linux我还是有很多收获的,因为学到了如何在Linux中使用命令行来完成一些操作,因为我觉得学习操作系统如果不会使用命令行来执行真的和没学过这门课程一样。
  • 并且我对于git的学习其实在本学期才正式开始,因为上学期我使用的idea直接在里面配置好之后,从里面直接上传的,并不是很清楚git的步骤,但是这学期学了虚拟机使用linux之后,我发现git是真的好用,对于自己每一部分上传的代码都可以做很详细的注释,对于以后自己看的时候,很清楚自己当时想表达的意思。
  • 最后学习使用vim,操作的时候还是有很多的方式,这也是以后用的地方,所以还是要练好的。

不足

  • 我对于课程每一章后面的家庭作业不是所有的题目都会做,稍微简单点的可以搞清楚,但是稍微复杂一些的题目我就不是很确定怎么样做了。并且在每周考试的时候,发现自己其实不是对于所有的知识点都掌握清楚了,还是有很多的问题,我只是只知其一不知其二,这个问题是需要我来改进的。
  • 并且老师强调的多次翻阅课本,我有做到,但是经常翻阅来复习,这个并没有做到,甚至我在这周刚开始的时候,居然还问了老师第七章是不是要自学,我居然忘了在第二周的时候已经学过了,这就说明在我学的那会是知道学过了,但是后面没有及时的复习导致

课程的建议和意见

  • 就学了这半学期以来,我觉得老师相比上学期来说,课上讲了很多知识,就是我们在课下不容易搞清楚的,本学期有了老师的讲解之后,对于其中的很多晦涩的地方明显有了理解,我觉得这个很好,毕竟很多知识学生自己来学还是比较困难的。
  • 目前来说,教材中因为是翻译版本,还是有一些知识点很模糊,不是很懂,希望老师上课可以再讲解一下,并且实验课我很想搞清楚为什么要这样做,而不是按照指导教程一步步做,虽然实验成功了。我想清楚实验的原理,希望老师可以多讲讲实验方面的内容。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 24篇 350小时
第一周 0/0行 1/2 20小时
第二周 53/53行 1/3 25/45小时
第三周 130/183行 1/4 30/75小时
第四周 0/183行 0/4 5/80小时
第五周 158/341行 1/5 30/110小时
第六周 84/425行 2/7 30/140小时
第七周 209/634行 1/7 30/170小时
第八周 0/634行 2/9 25/195小时

注释

-本学期之前的博客内容

posted @ 2016-11-06 15:01  20145233韩昊辰  阅读(252)  评论(2编辑  收藏  举报