• 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小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    Cocos2d-x之CCMenu理解
    【问题记录】mysql设置任意ip访问
    kafka eagle 使用教程
    查看Android源码和源码布局
    JAVA问题之泛型数组
    Linux面试题汇总答案(转)
    从源码看Azkaban作业流下发过程
    Azkaban源码学习笔记
    Java多线程基础学习(二)
    Java多线程基础学习(一)
  • 原文地址:https://www.cnblogs.com/xuanyan/p/7586984.html
Copyright © 2020-2023  润新知