2019-2020-1 20175214 《信息安全系统设计基础》第1周学习总结
教材学习内容总结
第一章
-
1、源程序是由一个个字节组成的,1字节=8位;
-
2、源程序编译:将高级语言编译为可执行目标文件。
ESc
iso
- 预处理:准备工作,根据字符#开头的指令修改原始的c程序;
- 编译:翻译成汇编语言;
- 汇编:翻译成机器语言;
- 链接:将调用的函数以某种形式(?)合并到.o文件中,形成可执行目标文件;
-
3、linux下编译c语言的指令
gcc -o hello hello.c
- 常见的linux编译c指令学习 ->链接
-
4、头文件:系统根据字符#读取预先存储的系统头文件,并插入程序文本中;
头文件中一般有用户构造的数据类型(如枚举类型),外部变量,外部函数、常量和内联函数等具有一定通用性或常用的量。而一般性的变量和函数定义不宜放在头文件中。
(摘自百度百科)。 -
5、了解编译系统的目的:
- 优化系统性能;
- 理解链接是出现的错误;
- 避免安全漏洞。
-
6、
./
和../
以及/
之间的区别./
是当前目录../
是父级目录/
是根目录
-
7、进程和上下文切换
- 个人理解:进程即需要执行的任务,当有更高优先级的任务需要执行的时候,系统将进行
上下文切换
,即存档当前进程a的上下文,切换执行进程b的上下文,待执行完b进程,再重新进入进程a的上下文; - 线程一般比进程更
高效
,进程可以由多个线程组成。
- 个人理解:进程即需要执行的任务,当有更高优先级的任务需要执行的时候,系统将进行
-
8、
"系统不仅仅是硬件,系统是硬件和系统软件相互交织的集合体,他们必须共同协作以达到运行应用程序的最终目的。"
-
9、
Amdahl定律
:类似短板定律?个人理解为只有必须同时提高大部分部件的性能才能显著优化系统性能; -
10、并发和并行:有点抽象,大致应该是指同时进行多个活动;
-
11、抽象:通俗的讲就是一种模拟吧,将细碎的操作隐藏起来,使其更加简洁单纯,比如用程序模拟出虚拟机,模拟出计算机的操作系统等。
第三章
- 1、链接:代码片段组合形成可执行文件。
- 2、链接器的主要工作:
- 符号解析:关联符号引用和符号定义,每个符号引用
正好
对应一个引用; - 重定位:我认为可以理解为将每个“住户”
符号定义
安排进名为内存
的“住所”,并有从0开始的“门牌号”地址
,并且修改之前的符号引用,使他们指向该“门牌号”内存地址
,系统将不加甄别的执行重定位;
- 符号解析:关联符号引用和符号定义,每个符号引用
- 3、目标文件:
- 可重定位目标文件
- 可执行目标文件
- 共享目标文件
- 4、
"尽可能地用static属性来保护变量和函数"
- 5、强符号和弱符号:根据书上的示例,我大致猜测强符号是指有明确的定义和赋值的符号,弱符号只有定义,参考博客C语言中的强符号与弱符号,有如下定义:
在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。
- 6、重定位条目:遇到一个未知的的目标引用,系统将生成重定位条目;
- 7、。。。。
ps:后面的实在看不懂了...接下来先进行云班课的学习
gcc学习
-
1、常用编译选项
-
2、多模块
-3、
教材学习中的问题和解决过程
-
问题1:上课时候老师提到了
.
是指当前目录,以及..
是指上一层目录,但是我觉得这个好像更像是路径,为什么输入./
系统就会运行该文件?还是说./
是一种运行指令? -
问题1解决方案:这个问题课本中有提到,大意为“如果输入非内置命令,
shell
将假设其为一个可执行文件的名字,加载并运行。”,所以我觉得系统应该是在对应目录直接尝试运行程序,而非是我以为的./
是一种运行指令。 -
问题2:尝试使用gcc编译时发现未安装gcc,根据提示输入
sudo apt install gcc
后报错。
lzc@lzc-VirtualBox:~$ sudo apt install gcc
E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
-
问题2解决方案:尝试了多种方法,包括杀死进程等指令,均无法解决,最后输入指令
sudo rm /var/lib/dpkg/lock-frontend
直接删除前端锁之后安装成功。
-
问题3:
- 当有多个弱符号存在时选择哪个?参考博客C语言中的强符号与弱符号中说
"链接器选择最先出现那个,也就是与链接顺序有关"
; - 而参考另一篇博客C语言中的强符号与弱符号中说
"当有多个弱符号相同时,链接器选择占用内存空间最大的那个"
,且这个结论和姚明宇同学博客链接的博客中的测试结果相同,到底哪个正确?
- 当有多个弱符号存在时选择哪个?参考博客C语言中的强符号与弱符号中说
-
问题3解决方案:暂未解决。
代码调试中的问题和解决过程
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1及原因,理解情况
- 错题2及原因,理解情况
- ...
其他(感悟、思考等,可选)
- 第七章看起来十分吃力,有点晦涩,感觉每个字都认得,但又不懂是什么意思,看到一半我就有点崩了,只能选择重头再看一遍,也只能勉强啃下来一半,有关静态库的链接还没看,这章课本中的描述有点抽象单薄,且有大量术语,有点难。
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |