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

    参考资料

  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/ashin-kl/p/7611552.html
Copyright © 2011-2022 走看看