20145214《信息安全系统设计基础》期中总结
知识点总结
week01
-
可以用
man -k
进行命令学习,相当于编程时的一个搜索引擎,后根据搜索出来的结果后面附带的数字(如1、2、3)找到所需的命令,也可以结合后面学习的grep 命令和管道进行多关键字查找man -k key1 | grep key2 | grep key3 | ...
-
Linux Bash中, 可以使用man printf查看C语言中printf函数的帮助文档。 (x)
-
如上图所示,
man printf
显示的分类为printf(1)
,而在帮助文档中,1
代表用户命令帮助,所以man printf
相当于man 1 printf
,而man 3 printf
才是库函数调用帮助
-
可以用
Tab键
补全命令、目录和参数 -
复制目录
cp -r 目录名
表示递归复制,删除目录用rm -r 目录名
-
强制删除文件用
rm -f 文件名
-
移动文件到指定目录
mv 源目录文件 目的目录
,重命名文件mv 旧的文件名 新的文件名
,批量重命名rename
-
cat
正序打印文件,tac
倒序打印文件,nl
添加行号打印,相当于cat -n
-
与搜索相关的命令常用的有如下几个
whereis,which,find,locate
-
与时间相关的命令参数
-atime 最后访问时间 -ctime 创建时间 -mtime 最后修改时间 -mtime n:在N天之前的“一天之内”修改过的文件 -mtime +n:在n天之前(不含n天本身)被修改过的文件 -mtime -n:在n天之内(含n天本身)被修改过的文件 -newer file:比file还要新的文件名
-
简单的顺序执行你可以使用
;
来完成 -
Linux中建立符号链接(快捷方式)使用的命令是( ln 或者 ln -s)
week02
-
实现“Display files,Sorted by size”功能的ls命令是 ( ls –S ),这道题目可以用
cheat ls
查看,也可以用man ls
帮助文档,用man ls
截图如下
-
编译过程:
预处理: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
week03
-
机器级程序使用的存储器地址是虚拟地址
-
获得汇编代码
gcc -S xxx.c -o xxx.s
-
进行反汇编
objdump -d xxx.o
-
MOV类指令
movb(传送字节) movw(传送字) movl(传送双字)
-
计算机的(字长)指明整数和指针数所的标称大小
-
计算机执行的整数运算实际上是模运算
-
IEEE浮点数标准包含符号、尾数、(阶码)三部分
week05
- (精通细节 )是理解更深和更基本概念的先决条件
- 寄存器中 esi edi可以用来操纵数组,esp ebp用来操纵栈帧
- (程序计数器或%eip) 指示将要执行的下一条指令在内存中的地址
- 两个寄存器(%ebp和%esp)保存着指向程序栈中重要位置的指针
- C语言中的循环结构汇编中可以用(条件测试和跳转)组合起来实现
- 为单个过程(函数)分配的那部分栈叫(栈帧)
- Linux汇编中,需要调用者保存的寄存器有(%eax,%edx,%ecx )
week06
-
Y86的顺序实现
1、取指:从存储器读取指令字节,地址为程序计数器(PC)的值。指令指示符字节两个四位部分,称为icode(指令代码)和ifun(指令功能)。vaIP(下一条指令的地址)=PC+已取出指令的长度。 2、译码:从寄存器文件读入最多两个操作数,得到valA和/或valB。 3、执行:算数逻辑单元(ALU)根据ifun的值执行指令指明的操作,计算存储器引用的有效地址,或者增加或减少栈指针。得到的值称为valE。也可根据条件码执行跳转。 4、访存:将数据写入存储器,或者从存储器读出数据。读出的值为valM。 5、写回:最多可以写两个结果到寄存器文件。 6、更新PC:将PC设置成下一条指令的地址。
-
与、或、非三种逻辑门可以用一种门(与非门, 或者 或非门)实现
week07
- SRAM和DRAM掉电后均无法保存里面的内容
- 读带宽的时间和空间局部性的二维函数称为存储器山。
- 存储层次结构中最小的缓存是(寄存器 )
- 存储器给出的读访问时间是(局部性)的一个函数
- 程序员可以编写(有良好空间和时间局部性)的程序来显著改进程序的运行时间
收获
- 本周的期中总结让我有了好好回顾过去几周学习的内容的机会,而不是一味地往前赶,在本周的学习中我从每周的试题出发,把每一道错题的为什么弄懂,在这个基础上又捡了一些之前没有发现的学习漏洞,这些我都记录在上面的知识点总结中了。
- 再一次的实践,看实验楼的实验内容,发现之前在学习中一知半解,只是单纯的亲手操作实践过的内容自己已经在这几周的学习过程中完全的掌握并且知其所以然了,感觉每一周的学习都没有白费,真的真的真真正正感受到了学习的乐趣~
- 通过这半个学期的学习,我觉得我掌握的一个最重要的既能就是检索信息,这应该算是自学的一部分,虽然上个学习老师一直在强调自主学习的重要性,但是我觉得上个学期自己并没有真正的做到,这半个学期以来,在遇到问题时我首先想到的是上网搜看看是不是别人在学习的时候也跟我遇到了同样的问题并且已经有了解决的办法,可能这对大部分的同学来说并不算什么,但是我觉得这是我个人的一个较大的收获,也侧面能说明了态度决定一切吧。
不足
- 读书时还是不细致,面对比较晦涩难懂的知识点偶尔存在着读不进去的情况,最后略读的结果就是有些细节的题不会,而且不会举一反三。这种情况下,在实践中或者作业中,需要用到书上的知识,我虽然已经阅读过一遍,但仍然不会解答。
- 在学习的时候我对一些题目的理解仅限于独立的题,不太会延伸扩展,遇到其他的提法就不太会了。比如磁盘那一章在习题中出现柱面的时候我发现公式套不上了,我就不会了。其实题目较前一题知识换了一种提法。后来再将前部分文字再读一遍以后才对。这也是理解不透彻导致的。以后学习还是应该慢读细读不能跨越式阅读。
课程建议和意见
- 我觉得每周的学习任务进程适合一周的学习时间来学习,养成了每周几乎每一天都会看书,完成一小部分的学习任务这样的学习习惯,但是最近加分的项目变多了,个人有一种无法兼顾到的感觉,要细致的学习完本周的内容已经耗费了太多的时间,所以几乎很少做老师给的其他额外的任务
代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第零周 | 0/0 | 1/1 | 5/5 | 使用虚拟机安装linux系统,安装ubuntu |
第一周 | 100/100 | 1/2 | 20/25 | 掌握核心的linux命令,了解了linux操作系统 |
第二周 | 76/176 | 1/3 | 30/55 | 学会了虚拟机上的C编程 |
第三周 | 214/390 | 1/4 | 20/75 | 初步学习计算机中各种数的表示和运算 |
第五周 | 138/528 | 1/5 | 25/100 | 通过学习汇编,了解逆向的思想应用 |
第六周 | 150/678 | 1/6 | 30/130 | 安装了Y86处理器,了解了ISA抽象 |
第七周 | 100/778 | 1/7 | 20/150 | 理解了局部性原理和缓存思想在存储层次结构中的应用 |
第八周 | 0/778 | 1/8 | 20/170 | 对前七周的内容进行了查缺补漏 |