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

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

一 期中内容总结

linux 命令复习

  • man -k
    • 根据关键字搜索联机帮助,是一种模糊搜索
    • 结果后的数字代表该解释是对应相应区段的内容,且总共有八个不同区段分类
    • 1,使用者在shell中可以操作的指令或可执行档
    • 2,系統核心可呼叫的函数与工具等
    • 3,库函数,大部分是C的函数库(libc)
    • 4,装置档案的说明,通常在/dev下的档案
    • 5,设定档或者是某些档案的格式
    • 6,游戏,屏保
    • 7,杂项
    • 8,系統管理員可用的管理指令
    • 也可以直接搜寻相应分类的命令解释,例如man 3 printf
  • cheat:
    • cheat xxx给出命令xxx的简短解释,并且列出xxx的相关使用范例给用户参考
  • grep:
    • 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
    • grep -nr xxx /usr/include 查找xxx的值,例如查找宏 STDOUT_FILENO 的值的命令是grep -nr STDOUT_FILENO /usr/include
  • vi
    • 分为三种状态,分别是一般模式、编辑模式和命令行模式
    • 一般模式:进入文件后即为一般模式,你可以使用h,j,k,l(也可以使用方向键)按键来移动光标,你可以使用删除字符或删除整行来处理文件内容, 也可以使用复制、粘贴来处理你的文件数据
    • 编辑模式:按下i, I, o, O, a, A, r, R会进入相应编辑模式,此时才可以进行编辑。按下Esc即可退出编辑模式
    • 命令行模式:输入: / ?进入命令行模式,完成退出,保存等操作
    • 同时编辑两个文件;vim 1.c 2.c
  • gcc
    • 编译:gcc hello.c -o hello

    • 详细的来说上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking),(生成文件后缀分别是iso)。

    • 预处理:gcc –E helloworld.c –o helloworld.i

    • 编译:gcc –S helloworld.i –o helloworld.s

    • 汇编:gcc –c helloworld.s –o helloworld.o

    • 链接:gcc helloworld.o –o helloworld

    • 多模块编译:例如gcc hello1.c hello2.c -o hello

    • 检错:gcc -Werror hello.c -o hello

  • gdb
    • l:查看文件

    • b:设置断点

      • 函数断点:b main:在main函数下设置断点

      • 行断点:b num:在第num行下设置断点

      • 临时断点:tb num:在第num行下设置临时断点(断点使用一次之后消失)

      • 条件断点:b num if i=8:

    • r:run,运行函数,r num从第num行开始运行

    • p:print,输出查看变量值,p i输出i的值

    • n & s:next & step,单步执行,s会进入函数,n将会一步执行完函数

其他内容总结

  • 计算机中有符号数,无符号数,浮点数的编码表示
  • 栈帧结构
    • 在调用子程序时,汇编中会有callret两条指令,在实际计算机运行中即在call之后将返回地址压入栈中,并跳转到调用程序的起始地址,ret即弹出地址,程序回到原本进程
    • 而针对计算机这一特性,且c语言中对数组可使用长度并没有限制,可以通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,执行攻击代码达到取得系统权限等目的,这就是缓冲区溢出漏洞攻击
  • 程序想要运行的越快就要从其局部性入手,要引用临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身
    • 重复引用同一个变量的程序有良好的时间局部性
    • 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
    • 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好

二 自身总结

  • 收获

    • 学习了代码编译过程,以及计算机的存储结构,程序的栈帧结构,局部性等,起先对于计算机构成、工作以及程序运行都只有一个模糊的概念,知其然不知其所以然。现在就有了一个初步的印象,之前学习c语言所要求的“高内聚,低耦合”现在看来其实就是一种局部性的体验,在写代码的时候也大概有了改进程序运行速度,性能的方向
    • 在仔细看了课上说的缓冲区溢出漏洞攻击,以前strcpy函数还用的挺多的,也压根没想过其中的一个细节上的疏忽可能会导致系统权限被他人修改这种结果,感觉在学计算机这种行业上,漏洞的存在还是很致命的,以后感觉在对于这种细节的问题上还是要多琢磨一下,说不定可以有意想不到的收获
  • 不足

    • 这门课比起上一学期的java程序语言来说,感觉现在所做的一直都是理解书上各种概念,而动手实践的部分就少了很多,代码敲的不多,但是想要弄懂的话我觉得还是要多自己在电脑上通过代码实践,这样理解的很更透彻,印象我觉得也会更深刻一点,不大会容易忘
  • 建议

    • 希望老师在讲课的时候能够给我们介绍,或者让有准备的同学给我们展示,或者讲解一些类似于缓冲区溢出漏洞攻击的实验,觉得这种类型的实验很有意思,真正动手做完之后感觉也能学到很多东西

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 20/20 学习常用linux命令
第二周 100/100 1/2 20/40 学习vim,gdb等用法
第三周 100/200 1/3 15/55
第四周 0/300 0/3 10/65
第五周 100/400 1/4 15/80 重温了汇编相关知识
第六周 0/400 1/5 15/95 学习了Y86
第七周 100/500 1/6 15/110 学习了存储器相关知识
第八周 0/500 2/8 20/130 复习

posted on 2016-11-06 20:49  20145319钟轲  阅读(151)  评论(2编辑  收藏  举报