20145330 《信息安全系统设计基础》期中总结
期中总结
自己新学到的知识点总结
复习Linux命令,特别是man -k, cheat, grep -nr xxx /usr/include
- man命令
- 常用选项:
- a:在所有的man帮助手册中搜索
- k:根据关键字搜索联机帮助,是一种模糊搜索
- f:关键字精确搜索,等价于whatis指令,显示给定关键字的简短描述信息
- M:指定man手册搜索的路径
- 常用选项:
- man -k:
- 数据结构中有线性查找算法,C标准库中没有这个功能的函数,但Linux中有,这个函数是(lfind或lsearch)
- man命令通常与管道命令结合使用 man -k k1|grep k2|grep 2
- linux中显示文件(file)属性(status)的命令是(stat)
- 数据结构中有二分查找算法,C标准库中有这个功能的函数,这个函数是(bsearch)
- linux中查找配置(configure)网卡(interface)的命令是(man -k configue|grep interface)
- cheat:
- cheat是非常好用的搜索工具,能够方便告诉你想要的内容。
- 实现“Display files,Sorted by size”功能的ls命令是 ( ls –S )
- To list content of /path/to/foo.tgz archive using tar (tar -jtvf /path/to/foo.tgz)
- 使用du命令对当前目录下的目录或文件按大小排序的命令是(du -sk*|sort -rn)
grep:
- 主要参数:
- c:只输出匹配行的计数
- I:不区分大小写(只适用于单字符)
- h:查询多文件时不显示文件名
- l:查询多文件时只输出包含匹配字符的文件名
- n:显示匹配行及行号
- s:不显示不存在或无匹配文本的错误信息
- v:显示不包含匹配文本的所有行
- 用于查找内容包含指定的范本样式的文件
- ~/test文件夹下有很多c源文件,查找main函数在哪个文件中的命令是(grep main.c)
- linux bash中,使用grep查找当前目录下.c中main函数在哪个文件中的命令是(grep main *.c)
- 查找宏 STDOUT_FILENO 的值的命令是(grep -nr STDOUT_FILENO /usr/include)
- 主要参数:
- find:
- 查找根目录下所有目录的find命令是(find/-type d)
- 其他
- 删除当前目录下test文件的命令是(rm test)
- 当前目录下创建20145300目录的命令是 (mkdir 20145300)
- Ubuntu中新建一个叫 lilei 的用户的命令是(sudo adduser lilei)
- 将当前目当中的test文件复制到"/home/ljp/"目录中的Linux命令是(cp test /home/ljp)
- zip程序可以压缩也可以解压文件。(X)只可以压缩
- Linux中,对目标代码test.o进行反汇编的命令是(objdump -d test.o)
- Y86模拟器的地址是wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar,下运载这个文件的Linux命令是:(
wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar ) - 解开sim.tar的Linux命令是(tar -xvf sim.tar)
- Ubuntu中安装flex的命令是(sudo apt-get install flex)
- Linux中建立符号链接(快捷方式)使用的命令是( ln 或者 ln -s)
复习vi, gcc, gdb,make的使用
- Vim常用命令总结
- 插入:
- i:在当前光标处进行编辑
- a:在光标后插入编辑
- 退出:
- :q:退出
- :wq!:强制保存并退出
- :wq:保存并退出
- :w :另存为
- 删除:
- x:删除游标所在的字符
- dd:删除整行
- 在vim中,查看printq!:强制退出,不保存f man pages(帮助文档)的命令是 :3K
- 插入:
- gdb
- 进入gdb:
- gcc -g xxx.c -o xxx
- gdb xxx
- 查看源码:
- (gdb) l:进行行号提示
- (gdb) b n:在第n行设置断点
- (gdb) r:运行代码,运行至断点处
- (gdb) n:单步运行
- (gdb) c:使程序继续往下运行,直到再次遇到断点或程序结束
- (gdb) q:退出GDB
- (gdb) watch n:在"n"设置了观察点,观察变量的变化情况
- gdb中使用命令(break main)设置main函数断点。
- gdb中使用命令(until)可以跳出循环语句。
- gdb中next和step都可以单步跟踪,根据自顶向下原则应该优先选用next
- GDB中以16进制形式打印%eax中内容的命令是(print /x $eax)
- 进入gdb:
GCC编译过程
- 以hello.c为例
- 预处理:gcc –E hello.c –o hello.i ;gcc –E调用cpp 产生预处理过的C原始程序
- 编译: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 产生可执行文件
- 运行: ./hello
GCC中INFINITY表示(无穷大)。
CH01-07易错习题
- 以hello.c为例
- CH01
- CPU中的(PC或程序计数器)寄存器总指向主存中的某条机器语言指令。
- (进程)是操作系统对正在运行的程序的一种抽象。
- 存储层次结构的主要思想是一层上存储器作为低一层存储器的(高速缓存)
- CH07
- linux系统中,链接器程序是(ld)。
- (加载器)将可执行文件的内容映射到存储器,并运行这个程序。
- C语言中的全局变量可以一次声明,多次定义。(X)
- CH02
- 练习2.6中整数换成12345,浮点数换成12345.0,最多时共(13)位匹配。
- a,b长度都是一个字节,a=6,b=15, a|b = ( 15 )
- a,b长度都是一个字节,a=6,b=15, a||b = ( 1,True,非零 都可以 )
- 计算机将信息按位编码,通常组织成(字节)序列。
- 计算机的(字长)指明整数和指针数所的标称大小。
- 文本数据比二进制数据具有更强的平台独立性。(ok)
- (香农)建立了布尔代数和数字逻辑之间的联系。
- 计算机执行的整数运算实际上是模运算。(Ok)
- IEEE浮点数标准包含符号、尾数、(阶码)三部分。
- CH03
- (精通细节 )是理解更深和更基本概念的先决条件。
- (程序计数器或%eip) 指示将要执行的下一条指令在内存中的地址。
- 两个寄存器(%ebp和%esp)保存着指向程序栈中重要位置的指针。
- 把立即数0x4050复制到%eax的指令是( movl $0x4050 ,%eax )
- SET指令对有符号数和无符号数有不同的处理方式。(X) 处理方式相同
- jz/jnz指令中跳转条件是由(ZF)决定的。
- C语言中的循环结构汇编中可以用(条件测试和跳转)组合起来实现。
- Linux汇编中,销毁栈帧的语句是(movl %ebp,%esp popl %ebp 或leave)
- Linux汇编中,需要调用者保存的寄存器有(%eax,%edx,%ecx )。
- GDB中以16进制形式打印%eax中内容的命令是(print /x $eax)
- CH04
- Y86中,有(8)个程序寄存器。
- Y86中,movl rA, rB 实现寄存器间的数据传送。( x )
- Y86中,状态码INS表示遇到非法地址。( X )
- (YIS或指令集模拟器 )可是模拟Y86机器代码的执行。
- HCL中,多路复用函数使用(情况表达式)来描述。
- ALU是一种时序电路。(X)
- 寄存器是一种时序电路。(X)
- CH06
- (存储器)总线连接I/O桥和主存。
- 逻辑磁盘块就是一个块数组。( ok )
- DMA传送不需要CPU的干涉。(OK)
- SSD是一种基于(闪存或Flash)的存储技术。
- 存储层次结构中最小的缓存是(寄存器 )。
- LRU策略指的是替换策略的缓存会选择(最后被访问时间距现在最远的块)
- 存储层次结构的本质是每一层存储设备都是较低一层的(缓存)。
- 程序员可以编写(有良好空间和时间局部性)的程序来显著改进程序的运行时间。
存储器给出的读访问时间是(局部性)的一个函数。
自己的收获
这学期已经是第二学期写博客了,相比于上学期刚刚接触的陌生与不适应,已经渐渐有了习惯的感觉,对每周知识的梳理是对这几天学习成果的反馈。这学期最大的收获其实是学习心态上的改变,上学期多少总觉得学习量大每次都有点应付的小情绪,这学期每周都把知识化整为零每天学习一点,就没有那么大压力,而且觉得的对知识的吸收也好了很多。通过这半学期的自我学习,我认为最重要的还是对自己的重新认知与态度上的积极转变,别人再怎么强制督促也是外部条件,只有自己心态上的积极转变才会有动力与真正的收获。
自己的不足
在自学方面我也只是算刚刚入门,要改进的地方也是路漫漫其修远兮。对书本的知识我到底每次自学完自己能消化多少,有些东西学过去因为没有理解到核心也只是似懂非懂,真正的原理并没有掌握。我很明白自己的不足是对知识的理解不够深入透彻,但是这个改进是日积月累的,对每一个不懂的问题都要搞懂,不光会做题还要理解题目的用意与相关联知识,这样才能更好的自学。
课程建议和意见
我认为大学自学这个方法是很好的,锻炼自主学子能力与做事效率,对今后的学习工作也有很大帮助。但是自学毕竟能达到的层次还是有限,如果老师在我们自学后再将课程串讲一遍我想大家肯定会理解的更加深刻。