2019-2020-1 20175214 《信息安全系统设计基础》第1周学习总结

2019-2020-1 20175214 《信息安全系统设计基础》第1周学习总结

教材学习内容总结

第一章

  • 1、源程序是由一个个字节组成的,1字节=8位;
  • 2、源程序编译:将高级语言编译为可执行目标文件。
    • ESc
    • iso
    • 预处理:准备工作,根据字符#开头的指令修改原始的c程序;
    • 编译:翻译成汇编语言;
    • 汇编:翻译成机器语言;
    • 链接:将调用的函数以某种形式(?)合并到.o文件中,形成可执行目标文件;
      1592121-20190925093853067-1479837712.jpg
  • 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、常用编译选项
    1592121-20190925094045244-877045304.png
    1592121-20190925094108532-1805406812.png
    1592121-20190925094113153-1446716905.png
    1592121-20190925094352429-331890980.png
    1592121-20190925094406213-905943406.png
    1592121-20190925094418780-57362571.png
    1592121-20190925094445438-1080033747.png

  • 2、多模块
    1592121-20190925094539577-1795098842.png

1592121-20190925094541023-1003309994.png

-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直接删除前端锁之后安装成功。
    1592121-20190925093934364-741379077.png

  • 问题3:
    • 当有多个弱符号存在时选择哪个?参考博客C语言中的强符号与弱符号中说"链接器选择最先出现那个,也就是与链接顺序有关"
    • 而参考另一篇博客C语言中的强符号与弱符号中说"当有多个弱符号相同时,链接器选择占用内存空间最大的那个",且这个结论和姚明宇同学博客链接的博客中的测试结果相同,到底哪个正确?
  • 问题3解决方案:暂未解决。

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

  • 问题1:XXXXXX
  • 问题1解决方案:XXXXXX
  • 问题2:XXXXXX
  • 问题2解决方案:XXXXXX
  • ...

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

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

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

  • 第七章看起来十分吃力,有点晦涩,感觉每个字都认得,但又不懂是什么意思,看到一半我就有点崩了,只能选择重头再看一遍,也只能勉强啃下来一半,有关静态库的链接还没看,这章课本中的描述有点抽象单薄,且有大量术语,有点难。
    xxx

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/220/20
第二周300/5002/418/38
第三周500/10003/722/60
第四周300/13002/930/90

转载于:https://www.cnblogs.com/fzlzc/p/11567628.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值