您的位置:首页 > 其它

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

2017-09-24 21:36 513 查看

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

教材学习内容总结

上周学习了计算机中信息的存储方式;了解了源程序如何被计算机一步步处理转化成目标文件,以及其对应的Linux指令(ESo iso);查看反馈的汇编码的指令objdump -d hello.o;了解编译系统如何工作的三大益处;了解系统的硬件组成;命令行下程序调试的方法;操作系统的功能、内涵;系统之间的通信;学习链接的意义;创建静态库;创建动态库。

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

问题1:书中第6页图1-4中介绍了一个典型系统的硬件组成,I/O设备通过配适器或控制器与I/O总线相连,I/O总线又通过I/O桥与系统总线相连,那么这里I/O桥的作用是什么?I/O桥与I/O总线的关系?

问题1解决方案:上网搜索了I/O桥的概念,发现没有明确的定义,学长说是“存储器结构”,知乎上的用户解释“有点像ARM 的AMBA”,但由于我对存储器和一些专业术语并不了解,所以还是没法理解I/O桥的概念。后来我在一篇博客里发现“系统总线是一组并行的导线,能携带地址、数据和控制信号。但是不同总线不能直接互通,这就用到了I/O桥”“一个计算机有多个不同类型的总线,这些总线由桥(bridge)链接起来。”,据此我分析I/O桥作用是联通系统总线与I/O总线。

问题2:主存和内存是同一个概念吗?

问题2解决方案:主存是主存储器的简称。“主存储器(Main memory),简称主存。是计算机硬件的一个重要部件,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。”内存是内部存储器的简称,包括RAM(主存)和ROM(只读存储器)。存在主存中的数据一旦断电就丢失了,存在ROM中的数据不会丢失。

关系图如下:



问题3:什么是标准的ELF-64目标文件格式?

问题3解决方案:参考ELF文件格式分析

我了解到目标文件有三种类型:1.可重定位文件(.o)2.可执行文件(.exe)3.共享目标文件(.so)。如下图所示,ELF目标格式一般包含 ELF 头部、程序头部表、节区、节区头部表几个部分。



浏览教材并针对每章提出一个问题

第一章:数据和控制信息以不同的方式存储在栈上为什么会引发安全漏洞?

第二章:无符号数和数的补码表示有哪些特性?

第三章:寄存器的使用惯例提出依据是什么?

第四章:组合和时序逻辑元素如何在数据通路中组合到一起?

第五章:如何减少程序需要做的工作的变换?

第六章:RAM、ROM、磁盘和固态硬盘是如何防止在层次结构中的?

第七章:位置无关代码主要应用于什么情况?

第八章:应用程序是如何与操作系统交互的?

第九章:应用程序如何使用和管理虚拟内存?

第十章:内核用什么数据结构来表示打开的文件?

第十一章:getaddrinfo函数和getnameinfo函数有什么区别或联系?

第十二章:如何理解互斥锁加锁顺序规则?

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

本周没有代码方面的问题

代码托管

(statistics.sh脚本的运行结果截图包含克隆项目后的代码)



上周考试错题总结

课下测试ch01

满分15分,得分15分

课下测试ch07

满分18分,得分11分

错题及解析:

1.main.c 调用了静态库libmath.a中的函数,编译main.c的命令是(AB)

A .

gcc -static main.c ./libmath.a -o main

B .

gcc -static main.c -L. -lmath -o main

C .

gcc -static main.c -L. -llibmath.a -o main

D .

gcc -static main.o ./libmath.a -o main

错因:误选了D,此处是将main.c文件编译为可执行文件main

知识延展:

库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。

对比一下两者:

静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。

动态库而言:某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。在程序运行的时候,被调用的动态链接库函数被安置在内存的某个地方,所有调用它的程序将指向这个代码段。因此,这些代码必须使用相对地址,而不是绝对地址。在编译的时候,我们需要告诉编译器,这些对象文件是用来做动态链接库的,所以要用地址不无关代码(Position Independent Code (PIC))。

注意:linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。

使用静态库链接、编译步骤:

编写.h文件和.c文件,注意.h文件的格式以及
#ifndef
#define
#endif
的使用

将头文件中包含的相关函数对应的.c文件编译生成 .o文件

由 .o 文件创建静态库(.a 文件):
ar cr lib静态库名.a XXX.o XXX.o


在程序中使用静态库:
gcc -static main.c -L. -lmath -o main
gcc -static main.c ./libmath.a -o main
两种格式

结对及互评

点评模板:

博客中值得学习的或问题:

xxx

xxx

...

代码中值得学习的或问题:

xxx

xxx

...

其他

本周结对学习情况

-  [20155333]()
-  结对照片
-  结对学习内容
-  第一章、第七章

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

刚经历了大学两年里最忙碌的一周,总结起来其实是自己在有打把时间去做一些事的时候却选择了懈怠,结果现在事情都积压到了一起。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周19/01/015/0了解计算机内部结构、程序执行过程中的具体过程、动态链接和静态链接
第二周300/5002/418/38
第三周500/10003/722/60
第四周300/13002/930/90
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

计划学习时间:20小时

实际学习时间:15小时

改进情况:将本周学习内容模块简化,重点放在问题及其解决上。

(有空多看看现代软件工程 课件

软件工程师能力自我评价表)

参考资料

《深入理解计算机系统V3》学习指导

CSAPP第六章-存储器的层次结构

彻底理解I/O架构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐