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

20145328 《信息安全系统设计基础》第8周学习总结

自己新学到的知识点总结

Linux命令

1.find用法

  • find的使用格式如下:
    $ find <指定目录> <指定条件> <指定动作> 
    - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。 
    - <指定条件>: 所要搜索的文件的特征。 
    - <指定动作>: 对搜索结果进行特定的处理。

eg:$ find . -type f -mmin -10

  • 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录

2.locate命令

  • locate命令是find -name的另一种写法,但更快,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。

  • 在使用locate之前,先使用updatedb命令,手动更新数据库。

  • locate命令的使用实例:

  $ locate /etc/sh 
  搜索etc目录下所有以sh开头的文件。 
  $ locate ~/m
  搜索用户主目录下,所有以m开头的文件。 
  $ locate -i ~/m 
  搜索用户主目录下,所有以m开头的文件,并且忽略大小写。

3.grep

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

  • n:为显示行号

  • r:为递归查找

  • 例如,如果想查找某个宏,我们已知宏保存在include文件夹中,所以可以使用下列语句:

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

4.which

  • which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

  • which命令的使用实例:$ which grep

区别

    which (寻找执行档) :这个指令是根据PATH这个环境变量所规范的路径,去搜寻执行档的档名,所以,重点是找出执行档而已,which 后面接的是完整档名 
    whereis (寻找特定档案):搜寻linux数据库档案中所记录的东西,和locate的主要区别在于后面的参数 
    locate:搜寻linux数据库档案中所记录的东西,后面直接跟档案的部分名称就行 
    find:直接搜索整个硬盘

5.touch

  • 命令功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间。
  • 命令格式:touch [选项]... 文件...
  • 命令参数:
    -a 或--time=atime或--time=access或--time=use  只更改存取时间。
    -c 或--no-create  不建立任何文档。
    -d  使用指定的日期时间,而非现在的时间。
    -f  此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
    -m 或--time=mtime或--time=modify  只更改变动时间。 
    -r  把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
    -t  使用指定的日期时间,而非现在的时间。

正则表达式

  • ‘多种字符’ 表达式:正则表达式中的一些表示方法,可以匹配 '多种字符 ' 其中的任意一个字表达符式。
  • 规则:
	d 0~9 中的任意一个数字
    w 任一字母或数字或下划线,即A~Z、a~z、0~9、_中任一个
    s 包括空格、制表符、换页符等空白字符中任意一个
    . 匹配除换行符( 
)以外任意一个字符
    [ ] 匹配其中任意字符,但每次匹配只匹配一个
    [^ ] 匹配除其中的任意字符,每次匹配只匹配一个

静态库

  • 静态库是一系列的目标文件(.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

gdb调试器:调试代码

  • (1)使用流程

    • 查看文件:l
    • 设置断点:在b后加入相对应的行号。例b 6
    • 查看断点情况:设置完断点后键入info b,在gdb中可以设置多个断点。bt 查询调用函数的情况。
    • 运行代码:默认从首行开始运行代码,键入r;r+行号:从该行号开始运行 查看变量值:p 变量。例:p n
    • 单步运行:n或s,s会进入函数,n不会进入函数
    • 恢复程序运行:c
    • 注意:程序的运行状态有“运行”、“暂停”、“停止“三种。
  • (2)断点的设置

    • 函数:b 文件名.c:函数名
    • 行:b 行数
    • 条件:b 行数 if 表达式(b 8 if == 10)
    • 临时:tb [文件名:]行号或函数名 <条件表达式>

make项目管理器

  • 功能 :识别文件代码是否更新,减少编译工作量

  • (1)makefile文件的编写规则

    • 格式为:
目标体:依赖文件

[tab键]各目标体运行命令

目标体:由make创建,通常是目标文件或可执行文件

依赖文件:创建目标体所依赖的文件

运行命令:创建每个目标体时需要的运行命令,必须以tab键开头。

使用make的格式:make 目标体
  • (2)makefile变量的定义

    • 递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容。

    • 格式定义:VAR = var

    • 非递归展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用。

    • 格式定义:VAR := var

    • make中变量的使用格式: $(变量名)

    • 变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感。

    • 变量分类:用户自定义变量、预定义变量、自动变量及环境变量。

  • (3)makefile规则

隐含规则

模式规则

第三章

  1. 反汇编命令 objdump -d xxx.o
  2. 执行汇编命令:gcc –s xxx.c –o xxx.s
  3. 64位处理器得到32代码的命令:gcc –m32 –s xxx.c
  4. 三种操作数:立即数、寄存器、存储器
  5. 条件码 : CF:进位标志 ZF:零标志 SF:符号标志 OF:溢出标志
  6. jump指令:直接跳转——后面跟标号作为跳转目标; 间接跳转——*后面跟一个操作数指示符
  7. 传送指令包括:数据传送指令和条件传送指令
  8. call指令的效果是将返回地址入栈。并跳转到被调用过程的起始处。
  9. ret指令返回到call指令后的那条指令
  10. leave指令可以使栈做好返回的准备 等价于:movl %ebp,%esp ; popl %ebp

第四章

  1. 指令体系结构:一个处理器支持的指令和指令的字节级编码
  2. 程序员可见状态:8个寄存器状态、程序计数器PC。
  3. 指令集的一个重要性质:字节编码必须有唯一的解释。
  4. Y86异常:状态码1,AOK,程序正常; 状态码2,HLT,处理处执行halt指令; 状态码3,ADR,非法地址;状态码4,INS,非法指令。
  5. 创建Y86代码的唯一工具是汇编器 ;YIS:指令集模拟器 6、pushl指令会把栈指针减4,并且将一个寄存器值写入存储器中。
  6. SEQ执行处理一条完整指令的步骤:取址、译码、执行、访存、写回、更新
  7. nop指令:除了将PC加1,不进行任何处理; halt指令:将处理器状态设置为HLT,导致处理器停止运行。
  8. 取址阶段包括指令存储器硬件单元。instrvalid:指示指令是否合法 needregids:指示是否包括一个寄存器指示符字节 need_valC:指示是否包括一个常数字 instrvalid和imemerror在访存阶段被用来产生状态码。
  9. “cond”硬件单元会根据条件码和功能码来确定是否进行条件分支或者条件数据传送。

第六章

  1. 随机访问存储器分为:静态的SRAM、动态的DRAM
  2. 根据携带信号不同,总线可分为数据总线、地址总线、控制总线。
  3. 磁盘容量 = 字节数/扇区 X 平均磁盘数/磁道 X 磁道数/表面 X 表面数/盘片 X 盘片数/磁盘
  4. 访问时间=寻道时间+旋转时间+传送时间
  5. 最大旋转延迟=1/RPM X 60secs/1min (s);平均旋转时间是最大旋转时间的一半
  6. 平均传送时间= 1/RPM x 1/(平均扇区数/磁道) x 60s/1min
  7. 逻辑磁盘块三元组(盘面,磁道,扇区):唯一地标示了对应的物理扇区
  8. CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令。
  9. 局部性包括时间局部性和空间局部性。
  10. 循环有好的时间和空间局部性
  11. 高速缓存:上一层做下一层的高速缓存
  12. 冷缓存(强制不命中冷不命中):一个空的缓存,对于有效位为0的情况 ; 容量不命中:当工作集的大小超过缓存的大小时;冲突不命中:限制性的放置策略会引起的一种不命中。
  13. 每个存储器地址有m位,形成M=2^m个不同的地址; 高速缓存组:S = 2^m个高速缓存组的数组 ; 高速缓存行:B = 2^m字节的数据块组成 ; 有效位:指明这个行是否包含有意义的信息; 标记位:唯一地标识存储在这个高速缓存行中的块,t = m -(b+s)
  14. 高速缓存参数的性能影响缓存大小的影响;块大小的影响;相联度的影响;写策略的影响

第七章

  1. c语言程序执行的过程涉及的工具:c预处理器(cpp)、编译器(cc1)、汇编器(as)、链接器程序(ld)
  2. 链接器的任务:符号解析、重定位
  3. 目标文件的三种形式:可重定位目标文件、可执行目标文件、共享目标文件
  4. 目标文件的格式:a.out、COFF、DE、ELF
  5. 链接器上下文的三种符号:全局符号、外部符号、本地符号

自己的收获

复习了关于linux指令相关的一些知识,之前对于find的掌握并不到位,所以在复习的过程中着重看了一下,仔细了解find指令与grep指令locate指令之间的区别。locate命令相当于find -name的另一种写法,但更快,grep则可以进行关键字搜索。对于汇编相关的内容也进行了复习,掌握程度虽然还是不够,但比起之前也算是有所收获。

自己的不足

汇编的部分依旧掌握不足,每周的学习还是比较拖沓,总是把任务拖到一起来解决,这样一来把自己很多东西都弄得比较混乱,有很多东西都有点理不清楚的感觉。准备拿个本子把每周需要的东西都列出来,一项一项的排好时间表进行解决,这样应该会好一点。

课程建议和意见

感觉在课程的安排上面并没有什么不足的地方,现在对于知识掌握的不熟悉还是因为自己所腾出的学习时间不够所导致的,现在进入大三上也有半个学期了,感觉是忙的人越来越忙,闲的人越来越闲,最开始的时候各个科目都还没有进入内容,有很多时间就被浪费了,到了中期随着各个科目的内容逐渐深入,实验课的加入时间渐渐不够,所以我认为是否可以将一部分内容放在前期,或者是将学习linux命令行以及vim的使用这一部分内容的时间融入到其他的内容之中,就像上个学期学习git的时候一样,虽然把这一部分内容提取出来有助于对这一部分内容深入理解,但是对于大部分学生来说他们对于vim的掌握并不需要那么深刻,对于这一部分学生来说有厂商制作的功能齐全的IDE为什么要自己去弄晦涩的编辑器。而且个人感觉对于vim在编程的过程中进行回更加容易一点。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/2 20/40
第二周 63/63 1/3 20/60
第三周 0/63 1/4 20/80
第四周 0/63 1/5 20/100
第五周 45/108 1/6 20/120
第六周 0/108 1/7 25/145
第七周 0/108 1/8 25/170
第八周 0/108 2/10 25/195

参考资料

原文地址:https://www.cnblogs.com/rebrust/p/6036663.html