20155339 2017-2018-1《信息安全系统设计》第四周课堂测试、Makefile以及myod

测试1-vi

  1. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
  2. 用Vi输入图中代码,并用gcc编译通过
  3. 在Vi中使用K查找printf的帮助文档
  4. 提交vi编辑过程截图,要全屏,包含自己的学号信息

运行结果

出现的问题:

  • 出现了很多warning,上图有体现,虽然可以运行,但看着比较不舒服,课堂上就一直在修改,以至于没能完成后面的测试。
  • 解决:课后长时间再次研究,发现是代码问题,head中的与我所命名的函数名称有所出入,因此虽然能编译,但是出现了许多warning,修改以后终于没有warning了,如下图

测试2-gcc测试

  1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码
  2. 生成的可执行文件中要有自己的学号
  3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

    运行结果

测试3-gdb测试

  1. 用gcc -g编译vi输入的代码
  2. 在main函数中设置一个行断点
  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

步骤

  • 编译可执行文件,由于会生成默认的输出文件,所以除非需要自定义一般的编译命令gcc -g xxx.c,需要调试代码前用gcc编译时一定要加-g参数,只有加了-g参数,才可以进行调试。
  • 启动gdb:gdb xxx
  • 在main函数设置断点:b main
  • 运行:这里包括运行程序:r单步执行:ns继续执行c

GDB常用命令

运行结果

测试4-静态库的测试

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 创建静态库,需要用到AR工具,命令如下:
    gcc -c xxx.c xxx2.c
    ar rcs xxxxx.a xxx.o xxx2.o
    其中后缀.a的文件是存档文件,是静态库,由多个.o合在一起组成。
  • 静态库的使用:比如要测试test.c,则
    gcc -c test.c
    gcc -static -o prog test.o ./xxxxx.a
    其中static参数告诉编译器驱动程序,链接器应该构成一个完全链接的可执行目标文件,prog是自定义的输出文件夹,./是指在当前路径下的xxxxx.a静态库,如果不是当前路径下的静态库,可加上路径。

运行结果

测试5-共享库

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 动态库的生成和调用
    若要生成一个mytest.so的动态库,给出如下指令
    gcc -shared -fpic -o mytest.so xx.c xx.c
  • 动态库的链接
    gcc -o prog main.c ./mytest.so

运行结果

测试6-Makefile

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

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

  • 刚开始看到这个题目,是完全不知所措的,因为不知道什么是Makefile,然后在网上进行搜索,并且学习,相关链接在后面已经给出,其中包括一个ppt,内容比较全。
    学习了之后才知道,之所以不知道makefile是因为之前在sWindows的IDE都为我们做了这个工作,makefile关系到了整个工程的编译规则,在makefile中你可以定义一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,或者说哪些文件需要怎么编译。只需要一个make命令,所有工程就完全自动编译。
  • Makefile的规则:
    target ... : prerequisites ...
    command
    其中target是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签。prerequisites就是,要生成那个target所需要的文件或是目标,command就是make时需要make来执行的命令。
  • 代码举例,如下图

运行结果

遇到的问题

  • 上图所示的问题,停止。
  • 解决方案,继续查看相关文档,知道了一个规则可以有多个命令行,但是需要注意的是每个命令行必须以[tab]开头。尤为重要!它的作用是告诉make这是一个命令行。

myod

  1. 复习c文件处理内容

  2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

  3. main与其他分开,制作静态库和动态库

  4. 编写Makefile

  5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

编译思路以及步骤

  • 首先,复习了c语言中关于文件的内容,再回顾了一下Myod命令,此处对于今天需要编写的内容为例,-t之后指定输出的进制,可以包括:a、c、d、f、o、u以及x。此处的x是指十六进制,-tx1则是按一个字符逐个输出,以此类推,od -tx -tc XXX是在输出十六进制ascii码的同时输出原文本。在Linux中对od -tx1 -tc XXX进行了尝试,其他也是换汤不换药,所以代码也是对od -tx -tc XXX进行了代码的编写。在Linux下的结果,如下图:

  • 其次,大概的思路就是主函数读取和关闭文件,一个od.c函数来按要求输出,观察上图,可知道一行为16个字符,因此可知循环控制条件为16。
  • 编译并修改,上面的思路是可以的,但是在静态库以及动态库中,这个静态库和动态库的建立就没有太大意义,且程序利用率不高,因此进行了升级,将od.c分为两个函数,一个负责-tx1的功能,一个负责-tc的功能,并且进行库的建立,提高了程序的利用率,节约了空间。

  • 库的建立以及makefile的编写,与上面所述基本一致,除了函数名称的改变。

遇到的问题

  • 问题一:程序进入了死循环
  • 解决:修改了多次不知道是不是文件的读取不对,最后重新按数据块进行了读取,重新编译了代码,解决了进入死循环的问题。
  • 问题二:控制一行的输出
  • 解决:通过判断文件是否读完即a[i]=='\0'是否成立以及i是否等于15来判断,来决定是否进入下一个函数,输入另一行的内容。
  • 问题三:仍然输出超过了16个
  • 解决:查看代码发现输出'\n'的条件是i==15,这就存在一个问题,如果文本已经读取完毕了了这种情况,所以对此处进行了重新编写。
  • 问题四:行号没有编辑
  • 解决:观察行号,得出行号有7个字符,并且符合printf("%07o",16*j);,所以在ascii.c函数中增加这样一个输出,在hex.c增加一个空格的输出,已达到格式的统一。
  • 问题五:用tab键分开太大,与Linux下的od命令所得差距颇大。
  • 解决:利用了%4x控制格式,已达到美观。

运行结果


升级后的结果

代码链接

相关参考资料

20155339 2017-2018-1《信息安全系统设计》第四周课堂测试、Makefile以及myod的更多相关文章

  1. 20155320信息安全系统设计第二周课堂考试总结及myod的实现

    20155320 信息安全系统设计第二周课堂考试总结及myod的实现 第二周测试一二已在课上提交 第二周测试3-gdb测试 用gcc -g编译vi输入的代码 在main函数中设置一个行断点 在main ...

  2. 20155319 2017-2018-1《信息安全系统设计》第四周课堂测试、Makefile、myod

    20155319 2017-2018-1<信息安全系统设计>第四周课堂测试.Makefile.myod 测试2-gcc测试 1.用gcc 进行预处理,编译,汇编,链接vi输入的代码 2.生 ...

  3. 20145209刘一阳《JAVA程序设计》第四周课堂测试

    第四周课堂测试 1.下列说法正确的是(ACD) A .使用extends关键字定义一个类的子类. B .Java与C++类似,支持多继承,即子类可以有一个或多个父类. C .Object是所有类的祖先 ...

  4. 20155339 《信息安全系统设计》第十周课下作业-IPC

    20155339 <信息安全系统设计>第十周课下作业-IPC 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在该进程的 ...

  5. 20155306 2017-2018-1《信息安全系统设计》第二周课堂测试以及myod的实现

    20155306 2017-2018-1<信息安全系统设计>第二周课堂测试以及myod的实现 第二周课堂测验: (注:前两项在课堂已提交,在此不做详解) 第一项: 每个.c一个文件,每个. ...

  6. 2018-2019-1-20165221&20165225 《信息安全系统设计》实验五:通讯协议设计

    2018-2019-1-20165221&20165225 <信息安全系统设计>-实验五:通讯协议设计 OpenSSL学习: 简介: OpenSSL是为网络通信提供安全及数据完整性 ...

  7. 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup

    2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...

  8. 20155321 《信息安全系统设计》课堂测试(ch06)

    20155321 <信息安全系统设计>课堂测试(ch06) (单选题|1分)下面代码中,对数组x填充后,采用直接映射高速缓存,所有对x和y引用的命中率为() A .1 B .1/4 C . ...

  9. MyEclips 2017/2018 (mac 版)安装与破解

    MyEclips 2017/2018 (mac 版)安装与破解 现在在学J2EE,然后使用的工具就是 MyEclipse,现在就抛弃 Eclipse 了,我就不多说它俩的区别了,但是 MyEclips ...

随机推荐

  1. SQL监控:mysql及mssql数据库SQL执行过程监控审计

    转载 Seay_法师 最近生活有很大的一个变动,所以博客也搁置了很长一段时间没写,好像写博客已经成了习惯,搁置一段时间就有那么点危机感,心里总觉得不自在.所以从今天起还是要继续拾起墨笔(键盘),继续好 ...

  2. SQL脚本修改表结构

    SQL脚本修改表结构 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default ...

  3. Innodb_io_capacity 对于IO稳定性的一些研究

    背景:最近在做一台线上服务器IO负载情况的时候发现了以下现象: 24小时的IO_UTIL 的曲线看似风平浪静,毛刺较少 但当图片放大到半小时级别的时候发现IO_UTIL即磁盘使用率出现了规律性的波动, ...

  4. CADisplayLink分析

    1.固定频率定时器: 2.UI帧率性能检测: 3.cpu动画控制器:

  5. js 调用 oc 的解释

    JavaScriptCore NSInvocation js解释器在解释函数调用时,会在执行环境进行函数搜索,主调者类型判定: 如果是js调用,直接解释执行: 如果是oc调用,则将调用打包成NSInv ...

  6. 「bzoj 4025: 二分图」

    题目 显然二分图没有奇环 于是考虑使用并查集维护一下看看是否存在奇环 我们可以考虑加权并查集,维护出\(x\)到\(fa_x\)的实际距离 由于我们只需要考虑奇偶性,于是我们处理出到根的路径异或一下就 ...

  7. 了解Session的本质

    有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制. AD: 有一点我们必须承认,大多数web应用程序都离 ...

  8. 404 Note Found 队 Alpha8

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  9. Spring+Hibernate+struts2+JPA 注解+跨域//完成手机端点击加载更多 下拉加载更多

    一.使用IDEA新建一个maven项目(student) 1.1.0编写pom文件,添加项目所需要的包 <?xml version="1.0" encoding=" ...

  10. tortoisegit 学习

    注:陈刚在Ubuntu虚拟机架设了git的服务器,用于管理公司的代码工程: tortoisegit是TortoiseSVN的Git版本,tortoisegit用于迁移TortoiseSVN到Torto ...