2018-2019-1 20165214 《信息安全系统设计基础》第三周学习总结
20165214 2018-2017-1 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
1、实际上gcc命令调用了一系列程序,将源代码转化成可执行代码。
2、存储器系统的实际实现是将多个硬件存储器和操作系统软件组合起来。
3、ISA:指令集体系结构,它定义了处理器状态、指令的格式、以及每条指令对状态的影响。
4、程序计数器(在IA32中,通常称为“PC”,用%eip表示),指示将要执行的下一条指令在存储器中的地址。
5、操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器存储器中的物理地址。
6、如果我们想要在64位机器上得到32位代码,可以使用指令gcc -m32 -S xxx.c
7、IA32使用栈帧结构来支持过程调用。为单个过程分配的那部分栈称为栈帧。栈指针可以移动,因此大多数信息的访问都是相对于栈帧的。注意,假设过程P(调用者)调用过程Q(被调用者),那么Q的参数放在P的栈帧中。同时,P的返回地址被压入栈中。
8、和我们平常学习的栈有些不同:在栈帧中,栈向低地址方向增长。所以,如果我们想要增大栈的空间,要做的是将栈指针的值减小而不是增大。
9、关于汇编的相关指令,在上学期的汇编课程中我们已经总结完毕,在此就不再重复总结。
10、关于C语言的指针运算:如果p是一个指向类型为T的数据的指针,p的值为x,那么表达式p+i的值为x+L*i,其中L是T的大小。单操作符&
用来产生地址,*
用来间接引用地址。
11、在看了课本第三章之后,再次使用第一章时所用到的指令来对课上的测试代码进行汇编,得到如下:
这里的汇编代码跟我们之前学的汇编代码有着一些不同。
12、数据对齐:为了能够让数据能够更好地进行对接,很多系统都对数据进行了对齐处理,规定每种类型的数据都会有自己的字节数,这样能够提高计算机的工作效率。
13、缓冲区溢出:有时候,我们在C语言中的输入是可以任意输入的,比如函数gets()等。但是这样有可能造成数据溢出,因为gets函数是以空格为界定来划分一行的。如果我们给一个字符数组规定了一定的数量x,而我们使用gets函数来输入,输入超过x个字符后,再按回车,就会发现缓冲区溢出,对程序造成不良影响,甚至让程序执行原本不会执行的函数。这是最常见的一种通过计算机网络攻击系统安全的方法。
14、区分病毒和蠕虫的概念。
15、缓冲区溢出攻击通常要知道目标系统的栈地址。为了防止缓冲区溢出攻击,一些系统采取将栈的位置每次运行都进行变化的策略。然而这个方法并不是绝对安全的,使用爆破攻击也是可以攻击成功的。所以,进一步的,GCC加入了“金丝雀值”,通过运行代码时随机产生一个数值,最后根据这个数值有没有发生变化来判断函数是否被修改。
教材学习中的问题和解决过程
- 问题1:IEEE浮点数的意义是什么?
- 问题1解决方案:IEEE浮点数规范了数字的表示方式。比如100,有1100的一次方、1010的一次方等表达方式。为了规范数字表示,采用了统一的一套表示方式,那就是IEEE浮点数
- 问题2:蠕虫是怎么样通过计算机自我复制从而影响计算机的?
- 问题2解决方案:还没解决该问题。
代码托管
不知道为何,我的代码数量都统计不出来。还没有找到原因。
其他
这节课开课之前,我以为它仍然是对JAVA的延伸,后来发现它更多的是跟C语言相关的,同时我也认识到了自己在C语言上的一些不足。接下来应当着重补一下自己在这块的不足,让接下来的学习更加顺畅一些。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 63/63 | 1/1 | 7/7 | |
第二周 | 100/163 | 1/2 | 15/22 | |
第二周 | 2/4 | 16/38 |
-
计划学习时间:18小时
-
实际学习时间:16小时