2017-2018-1 20155215 《信息安全系统设计基础》第1周学习总结
2017-2018-1 学号 《信息安全系统设计基础》第1周学习总结
教材学习内容总结
第一章:
- 信息就是位串(二进制)+上下文
- hello.c->hello.i->hello.s->hello.o(预处理,编译,汇编,链接)
- 主要都是一些基本的计算机系统知识,包括系统结构,并行,运行等等。
第七章:
- 编译器驱动器程序
- 调动GCC驱动程序,
gcc -02 -g -o -p main.c swap.c
/*
main.c
*/
void swap();
int buf[2]={1,2};
int main()
{
swap();
return 0;
}
extern int buf[];
int *bufp0 = &buf[0];
int *bufp1;
void swap()
{
int temp;
bufp1 = &buf[1];
temp = *bufp0;
*bufp0 = *bufp1;
*bufp1 = temp;
}
- 链接器必须完成两个主要任务,符合解析,重定位。
- 编译器和汇编器生成重定位汇编文件(包括共享目标文件),链接器生成可执行目标文件。
- 符号和符号表:认识到本地链接器符号和本地程序变量的不同是很重要。.symtab中的符号表不包含对应于本地非静态变量的任何符号。
教材学习中的问题和解决过程
- 问题1:静态链接和动态链接的区别是什么
- 问题1解决方案:我在网上查了一下,得到下面这些说法:
动态链接库(Dynamic Linked Library):
Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中。其中有3个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;
User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll,它包含用于画图和显示文本的各个函数。
静态库(Static Library):
函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块
组合起来创建最终的可执行文件(.EXE文件)。
导入库(Import Library):
在使用动态链接库的时候,往往提供两个文件:一个引入库和一个DLL。引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需
要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。
在运行Windows程序时,它通过一个被称作“动态链接”的进程与Windows相接。一个Windows的.EXE文件拥有它使用不同动态链接库的引用,所使用的函数即在那里。当Windows程
序被加载到内存中时,程序中的调用被指向DLL函数的入口,如果DLL不在内存中,系统就将其加载到内存中。
当链接Windows程序以产生一个可执行文件时,你必须链接由编程环境提供的专门的“导入库(import library)库”。这些导入库包含了动态链接库名称和所有Windows函数调用的
引用信息。链接程序使用该信息在.EXE文件中构造一个表,当加载程序时,Windows使用它将调用转换为Windows函数。
代码调试中的问题和解决过程
-
问题1:我在编译hello.c和Hello.c 程序时都报错了:
-
问题1解决方案:结果发现就是我的符号打错了,修改之后就可以正常编译了。
-
问题2:不知道为什么我的输出每次都会多一个%
-
问题2解决方案: 我试了很多次都还是有%,暂时没找到解决方法。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
暂无。
结对及互评
暂无。
其他(感悟、思考等,可选)
这学期的第一周第二周是电子实习,所以这门课程开始的稍微晚了一些。当我重新打开蓝墨云,又开始写博客的那一刻起,我才真真正正地感受到,大三下开始了。新的学期到来,上学期的内容不免有些遗漏,上学期Java的成绩不太理想,希望今年的自己能够取得更好的成绩吧。大学的时间已经过了大半了,相当于只剩下三分之一,但愿我能不忘初心,继续前进。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 51/51 | 1/1 | 10/14 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:14小时
-
实际学习时间:10小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)