zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155330 《信息安全系统设计基础》第2周课堂实践

    2017-2018-1 20155330 《信息安全系统设计基础》第二周课堂实验

    测试1-vi

    1. 每个* .c一个文件,每个*.h一个文件,文件名中最好有自己的学号

    2. 用Vi输入图中代码,并用gcc编译通过

    3. 在Vi中使用K查找printf的帮助文档

    4. 提交vi编辑过程截图,要全屏,包含自己的学号信息


      编辑过程截图

      查找printf帮助文档

    使用到的命令及相关说明

    1. vi filename 打开或新建文件,并将光标置于第一行首。进入vim编辑器后单击【i】进入插入模式可对文本进行编辑,编辑完成后单击【Esc】退出插入模式,再输入【:wq】保存并退出编辑器。
    2. gcc * .c -o a.out 编译之前生成的.c文件并生成a.out可执行文件。
    3. ./a.out 运行程序。
    4. 如何在vi中使用K查找关键字手册 使用vi命令进入编辑器后将光标移动至关键字处,输入大写的K方可调用相关手册。

    测试2-gcc测试

    1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码

    2. 生成的可执行文件中要有自己的学号

    3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

    使用到的命令

    1. gcc -E .c -o .i 编译预处理
    2. gcc -S .i -o .s 产生汇编代码
    3. gcc -c .s -o .o 进行汇编
    4. gcc * .o -o XXX 生成可执行文件
    5. ls 显示文件列表

    测试3-gdb测试

    1. 用gcc -g编译vi输入的代码

    2. 在main函数中设置一个行断点

    3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点

    4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

    使用到的命令

    1. gdb XXX 进入调试模式

    2. gdb相关命令

      1. set args 可指定运行时参数。(如:set args 10 20 30 40 50 )
      2. show args 命令可以查看设置好的运行参数。
      3. run (r) 启动程序。
      4. pwd 显示当前的所在目录。
      5. break 设置断点,可以简写为b
      6. b X(整数) 设置断点,在源程序第X行
      7. b func 设置断点,在func函数入口处
      8. info b 查询所有断点
      9. b X(整数) if i==X 设置条件断电,在for循环后一行设置。

    测试4-静态库的测试

    1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
    2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

    使用到的命令

    1. ar rcs xxx.a xx1.o xx2.o

      r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。

      c:创建一个库。不管库是否存在,都将创建。

      s:创建目标文件索引,这在创建较大的库时能加快时间。

    2. **gcc -static ** 静态编译可执行文件,避免使用动态库的方式。

    测试5-共享库

    1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?

    2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

    使用到的命令

    1. gcc -shared -fpic -o XX.so XX1.c ... 得到动态库文件

    测试6-Makefile

    1. 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.

    2. 提交Make过程截图,要全屏,包含自己的学号信息

    使用到的命令

    1. vim Makefile 使用vim打开makefile并进行编辑
    2. 在编辑makefile文本时需注意:一个Makefile文件主要含有一系列的规则,每条规则包含一下内容:一个目标,即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如‘clean’;一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,并以tab开头。

    Myod

    1. 复习c文件处理内容
    2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
    3. main与其他分开,制作静态库和动态库
    4. 编写Makefile
    5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

    过程

    1. 首先明确题目要求,将文本文件如图示输出
    2. 即将文本逐个按照十六进制的ASCⅡ码对应输出。由此,我们可以知道,主函数用于读取文件、调用转换函数和关闭文件。转换函数od则用于将文本转换为十六进制数的ASCⅡ码。

    结果

    遇到的问题

    • 问题1:在测试1、2中使用gcc编译运行代码时出现"未定义的引用"。

    • 解决方案:这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题。在gcc编译的时候,如果文件a依赖于文件b,那么编译的时候必须把a放前面,b放后面。

    • 问题2:在编译makefile时出现如图所示问题:

    • 解决方案:经过学习后发现是由于在编辑文本时加入了target但是使用的不正确所导致。将target和相关文本删除后可运行。

    学到的知识

    每部分所提到的使用的命令即为所学。

    总结

    由于粗心大意,导致第一次周测的结果十分糟糕,只勉强完成了测试1、2。由于内存不够无法配置虚拟机的原因,在买到新的内存条并安装后,只有少量的时间对之前所学内容进行回顾,同时没有很好的吸收上周所教授的新的内容,导致课堂测试时无法很好的解决一些问题。特别是由于粗心造成的输入代码时,把关联头文件输入错误这样的失误。总的来说,还要更加细心、虚心学习。

    参考资料

  • 相关阅读:
    minikube国内在线部署体验
    分表与分库使用场景以及设计方式
    epool与select有什么区别
    使用ssh-keygen生成私钥和公钥
    mysql关键字冲突
    MySQL 获取当前时间戳
    平时常说的ThreadLocal,今天就彻底解决它
    mysql和mssql最大连接数
    Spring Boot实战:拦截器与过滤器
    Mysql 索引问题-日期索引使用
  • 原文地址:https://www.cnblogs.com/ashin-kl/p/7611552.html
Copyright © 2011-2022 走看看