2017-2018-1 20155218 《信息安全系统设计基础》第1周学习总结

2017-2018-1 20155218 《信息安全系统设计基础》第1周学习总结

课本预览

  1. 计算机系统中虚拟的概念
  2. 关于信息存储的相关方法
  3. 如何反汇编和理解逆向
  4. 理解ISA抽象作用
  5. 如何优化程序功能
  6. 告诉缓存的原理
  7. 静态库和动态库的应用和原理
  8. 异常及其种类
  9. 虚拟内存的实现和作用
  10. 系统如何处理编程错误
  11. 如何用c实现网络编程
  12. 并发和进程的概念

教材学习内容总结

  1. 信息就是位+上下文;
  2. 区分不同数据对象的唯一办法就是我们读到这些数据对象时的上下文

(1)预处理:

gcc -E hello.c -o hello.i

(2)编译:

gcc -s hello.i -o hello.s

(3) 汇编:

gcc -c hello.s -o hello.o

(4)链接:hello.o->hello
4. 主存是由一组动态随机存取存储器(DRAM)芯片组成
5. 高速缓存存储器存在的应用程序员能够利用高速缓存将程序的性能提升一个数量级
6. 操作系统的两个基本功能:
(1):防止硬件被失控的应用程序滥用;
(2):向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备;
7. 文件是对I/O设备的抽象表示:
8. 虚拟内存是对主存和磁盘I/O设备的抽象表示
9. 进程则是对处理器、主存和I/O设备的抽象表示。
10. 虚拟机提供对整个计算机的抽象
10. 进程是操作系统对一个正在运行的程序的一种抽象
11. 操作系统实现这种交错进行的机智成为上下文切换。
12. 从一个系统到下一个系统的转换是由操作系统的内核(内核是操作系统代码常驻贮存的部分)进行管理
13. 实现进程需要低级硬件和操作系统的紧密配合
14. Amdahl定律的主要观点————想要显著加速整个系统,必须提升全系统中相当大的部分的速度
15. 链接器需要完成的两个主要任务:
1:符号解析 2:重定位

  1. 连接器的基本事实:目标文件纯粹是字节块的集合
  2. 链接器处理多重定义的符号名的规则:

(1)不允许有多个重名的强符号:
(2)如果有一个强符号和多个弱符号同名,那么选择强符号
(3)如果有多个弱符号同名,那么从这些弱符号中任意选择一个。

19.重定位有两部分组成:(1)重定位节和符号定义。(2)重定位节中的符号引用。

教材学习中的问题和解决过程

  • 问题1:强符号和弱符号:
  • 解决方案:在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。
    对于它们,下列三条规则使用:

① 同名的强符号只能有一个,否则编译器报"重复定义"错误。

② 允许一个强符号和多个弱符号,但定义会选择强符号的。

③ 当有多个弱符号相同时,链接器选择占用内存空间最大的那个。

  • xx2问题
  • xx2解决方案
  • ...

代码调试中的问题和解决过程

  • 1:

  • 1解决方案:OS X里本身没有gcc,而XCode 5的Command Line Tools中提供的是苹果做的clang。然后经过查找资料发现clang可能会比gcc更加好用,打算直接学习clang.
    浅谈clang生成和链接数据库

  • 问题2:gcc中的选项含义:

  • 解决方案:.gcc常用选项总结

1、没有任何选项:gcc helloworld.c
结果会在与helloworld.c相同的目录下产生一个a.out的可执行文件。

2、-o选项,指定输出文件名:gcc -o helloworld helloworld.c
-o意思是Output即需要指定输出的可执行文件的名称。这里的名称为helloworld。

3、-c选项,只编译,不汇编连接:gcc -c helloworld.c
-c意思就是Compile,产生一个叫helloworld.o的目标文件

4、-S选项,产生汇编源文件:gcc -S helloworld.c
-S意思就是aSsemble,产生一个叫helloworld.s的汇编源文件

5、-E选项,预处理C源文件:gcc -E helloworld.c
-E意思就是prEprocess。输出不是送到一个文件而是标准输出。当然可以对它进行重定向:
gcc -E helloworld.c > helloworld.txt

代码托管

  • 代码提交过程截图:


上周考试错题总结

  • 错题及原因,理解情况
  • 错题2及原因,理解情况
  • ...

其他(感悟、思考等,可选)

我按照书上的代码打,然后看知识点,不会或者弄出结果的就百度,虽然能解决,但是事后同学来找我,我还是记不住具体的命令操作,所以我觉得还是得复习和巩固我们所学的知识,不能走马观花,浪费时间。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第三周 / 1/20 10/

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

原文地址:https://www.cnblogs.com/xzh1996/p/7588663.html