学号—20155239—吕宇轩《信息安全系统设计基础》课程总结

学号—20155239—吕宇轩《信息安全系统设计基础》课程总结

每周作业链接汇总

第一周作业

  • 主要学习第一章和第七章,其主要内容包括:计算机系统的组成,相关的一些概念,以及如何使用链接,将各种代码和数据片段收集并组合成为一个单一文件。
  • 二维码如下:

第二周作业

  • 课堂实践以及MyOD
  • 二维码如下:

第三周作业

  • 主要学习教材第二章,主要包括信息的表示和处理,其中包括信息的存储,整数的表示和运算,浮点数等
  • 二维码如下:

第四周作业

  • 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名。
  • 二维码如下:

第五周作业

  • 学习内容是汇编语言,信息安全的核心思维方式是“逆向”,反汇编就是直接的逆向工程。本章重点是3.7,但没有3.1-3.6的基础也是不行,3.11是关于用GDB调试汇编。
  • 二维码如下:

第六周作业

  • 二维码如下:

第七周作业

  • 了解ISA抽象的作用
    掌握ISA,了解流水线和实现方式。
  • 二维码如下:
  1. 第八周课上作业

  2. 第八周课下作业一

  1. 第八周课下作业二

  • 课上提交内容补充

第九周作业

  • 了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等)
  • 二维码

第11周作业

  • 理解虚拟存储器的概念和作用,理解地址翻译的概念,理解存储器映射,掌握动态存储器分配的方法,理解垃圾收集的概念。
  • 二维码

第13周作业

  • 重点学习第三章。
  • 二维码

第14周作业

  • 再次巩固第八章。
  • 二维码

实验报告链接汇总

实验一

  • 开发环境的熟悉:交叉编译环境,目标机宿主机联通,目标机宿主机联通,目标机模块分解.
  • 二维码

实验二

  • 固件程序设计:MDK,LED,UART,SM1。
  • 二维码

实验三

  • 并发程序:基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端,使用多线程实现wc服务器并使用同步互斥机制- 保证计数正确。
  • 二维码

实验四

  • 外设驱动程序设计:在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
  • 二维码

实验五

  • 通讯协议设计:Linux下OpenSSL的安装与使用,在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护。
  • 二维码

    代码托管链接和二维码:

截图

git log --pretty=format:"%h - %an, %ar : %s" 的结果

  • 代码量汇总提交statistics.sh的支持截图

  • 代码驱动的学习做到没有?

做到了

  • 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得?

在不确定的探索中才能学到正真自己想要的东西

  • 实践上有什么经验教训

提前做好预习和准备

  • 整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点

有些地方没有抓住重点,可能是因为没有深入学习过

  • 回答一下第1周作业中自己提出的问题
    1.hello world是怎样工作的?
    Hello World是早年有情怀的程序员,发明了新的编程语言(或者任何新技术)的时候,把它假象成一个有生命有情感的个体,第一次来到这个世界,所以要对这个世界说你好。
    其实你可以把Hello World换成任何其他内容,甚至是中文。它只是一段文字而已。
    2.反码和补码在作用上有什么区别?
    正数的原码,反码和补码都一样的,而负数就不一样了!计算机为了让所有的数都是进行同一个加法运算,就有了原码,反码和补码的产生!负数的补码等于它的绝对值的原码取反后得到这个负数的反码,而在反码的基础上加1就变成了这个负数的补码了!下面我用8位的来举例(最高位是符号位):
    45 原码:00101101 反码:00101101 补码:00101101
    -45 原码:10101101 反码:11010010(原码取反:符号位不变,而其它0变1,1变0) 补码:11010011(反码:11010010 +1=11010011)
    3.直到型循环和当行循环有什么异同?
    最大的区别是do{}while()结构不论条件是否满足都要进入循环至少一次
    而while(){}结果一旦第一次不满足就一次都不会执行
    4.Y86指令集体系结构是怎样的?
    Y86是一个指令体系结构(ISA),它是一个写这本书的作者出的指令集.目的是为了让我们更加清晰地了解ISA,就像在读编译原理的时候,作者会教你做个编译器是一样的道理.理论上讲,我们在编写一个程序的时候,我们是可以知道CPU的状态的.因为在你观察程序的汇编指令时,你可以知道当程序执行到某个地方,寄存和,存储器以及条件码寄存器等等的状态是如何的.说到底,无论寄存器,存储器还是条件码寄存器等等,都是汇编指令可以访问的处理器状态.在设计和实现一个处理器的时候,只要我们能保证机器级程序(比如汇编程序)可以正常的访问程序员可见状态(比如寄存器,存储器),那么就不需要非得按照ISA真正的方式来表示我们的处理器状态.
    5.循环的低效率是怎样产生的?
    局部变量的创建次数不同
    6.高速缓存有哪些类型?
    储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度
    7.处理目标文件有哪些工具?
    在Unix系统中有大量可用的工具可以帮助你理解和处理目标文件。特别的,GNU binutils包尤其有帮助,而且可以运行在每个Unix平台上。
    AR:创建静态库,插入、删除、列出和提取成员。
    STRING:列出一个目标文件中所有可打印的字符串。
    STRIP:从目标文件中删除符号表信息。
    NM:列出一个目标文件的符号表中定义的符号。
    SIZE:列出目标文件中节的名字和大小。
    READELF:显示一个目标文件的完整结构,包括ELF头中编码的所有信息。包含SIZE和NM的功能。
    OBJDUMP:所有二进制工具之母。能够显示一个目标文件中所有的信息。它最大的作用是反汇编。.text节中的二进制指令。
    Unix 系统为操作共享库还提供了LDD程序:
    LDD:列出一个可执行文件在运行时所需要的共享库。
    8.什么是异常事件?
    异常(exception) 是程序运行过程中发生的事件, 该事件可以中断程序指令的正常执行流程.
    9.虚拟存储器有哪些作用?
    虚拟内存的作用 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Window 虚拟存储器s中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内存里储存的文件释放到原来的安装目录里了。
    10.什么是高速缓存污染和异常控制流?
    系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关。现代系统通过使控制流 发生突变对这些情况做出反应。我们称这种突变为异常控制流( Exceptional Control Flow,ECF)异常控制流发生在系统的各个层次。
    11.网络编程中为什么要用结构体来存放IP地址 ?
    按照定义,IP地址应该是存放在 addr为指针的结构体内,奇怪的是在我的机器调试发现,通过pcap_findalldevs(&m_t_all_pdevs,m_t_errbuf)获取网卡列表后,IP地址全部存放在next->addr里,而addr里存放IP的位置全是0,网上有解释说,之所以存在next指针,是因为同一块网卡可以绑定多个IP,但是我的机器又没有经过特殊配置,个人觉着默认的话,IP也应该在addr里。
    12.多线程并发机制的实现?
    Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。
      Servlet的多线程机制
     
      Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet容器会自动使用线程池等技术来支持系统的运行
  • 你有什么项目被加分,谈谈你的经验

一、mybash的实现

  1. 学习pwd命令
  2. 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
  3. 实现mypwd
  4. 测试mypwd

二、实现mypwd(选做,加分)

  1. 使用fork,exec,wait实现mybash

三、缓冲区溢出漏洞实验

缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这个漏洞是非常不利的,黑客可以改变程序的流控制,甚至执行代码的任意片段。学习这个操作让我对溢出有了了解和实践的收获。

四、stat命令的实现-mysate

五、Linux下IPC机制

  • 总结(给出链接和二维码)

  • 项目(给出链接和二维码)

  • 教程(给出链接和二维码)

  • 你有什么项目被扣分,谈谈你的教训

没有

  • 不动手实践
    没有
  • 迟交作业
    一、第六周课堂补交
  • 不验收代码
  • 课程收获与不足
    对计算机系统有了深入学习和实践,不足就是还有要继续学习的地方
  • 自己的收获(投入,效率,效果等)
    这门课平时投入很长时间,效率从一开始很慢到后来逐步提升,效果也渐渐的显著
  • 自己需要改进的地方
    加强思考思维
  • 如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
  • 给开学初的你和学弟学妹们的学习建议
    认真对待每次博客,和课上实践
  • 如果重新学习这门课,怎么做才可以学的更好

需要做大量的实践

问卷调查

  • 你平均每周投入到本课程多长时间?

十小时

  • 每周的学习效率有提高吗?

  • 学习效果自己满意吗?

还行

  • 课程结束后会继续一周至少一篇博客吗
    ?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)

看情况学习

  • 你觉得这门课老师应该继续做哪一件事情?
    我觉得老师的教学方式很灵活,继续用蓝墨云来辅助教学
  • 你觉得这门课老师应该停止做哪一件事情?
    减少不必要的博客提交
  • 你觉得这门课老师应该开始做什么新的事情?
    老师一直在创新自己的教学方式和技巧
  • 其他任意发挥
  • 给出你的总结的链接和二维码

posted on 2017-12-31 18:05  吕宇轩  阅读(250)  评论(0编辑  收藏  举报