2017-2018-1 20155313 《信息安全系统设计基础》 Myod


Myod要求

1.复习c文件处理内容

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

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

4.编写Makefile

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

6.在博客园发表一篇博客,重点写遇到的问题和解决过程


解决过程

1.Linux环境下c语言的处理我们目前使用的是vim编辑器,vim编辑器的下载安装与调试在第一周的博客已经学习。我们通过使用vim编辑器对c语言程序及逆行编译,生成不同类型的文件,实现不同的功能,具体代码在第一周的博客中有进行整理。

除了vim以外,我们还使用了gdb进行断点调试,这些也在第二周的补交博客中进行了详细说明。

总而言之,之前在windows系统上无论使用code blocks还是vs++,我们以前学过的很多的功能在Linux上几乎都能实现,因此在课下也需要更多地去研究与学习。


2.首先一开始我对题目是不理解的,然后我想起来去年娄老师在java课上好像对我们提出了同样的要求,于是我们参考了去年同学写的博客,对od功能有了进一步的理解。

功能说明:输出文件内容。

语  法:od [-abcdfhilovx][-A <字码基数>][-j <字符数目>][-N <字符数目>][-s <字符串字符数>][-t <输出格式>][-w <每列字符数>][--help][--version][文件...]

补充说明:od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来。

参  数:

-a 此参数的效果和同时指定"-ta"参数相同。

-A<字码基数> 选择要以何种基数计算字码。

-b 此参数的效果和同时指定"-toC"参数相同。

 

-c 此参数的效果和同时指定"-tC"参数相同。

 

-d 此参数的效果和同时指定"-tu2"参数相同。

-f 此参数的效果和同时指定"-tfF"参数相同。

-h 此参数的效果和同时指定"-tx2"参数相同。

-i 此参数的效果和同时指定"-td2"参数相同。

-j<字符数目>或--skip-bytes=<字符数目> 略过设置的字符数目。

-l 此参数的效果和同时指定"-td4"参数相同。

-N<字符数目>或--read-bytes=<字符数目> 到设置的字符数目为止。

 

-o 此参数的效果和同时指定"-to2"参数相同。

-s<字符串字符数>或--strings=<字符串字符数> 只显示符合指定的字符数目的字符串。

-t<输出格式>或--format=<输出格式> 设置输出格式。

-v或--output-duplicates 输出时不省略重复的数据。

-w<每列字符数>或--width=<每列字符数> 设置每列的最大字符数。

-x 此参数的效果和同时指定"-h"参数相同。

--help 在线帮助。

--version 显示版本信息。

在初步理解了od的功能以后我也理解了这道题目的含义,od是linux内部带的一个函数,可以输出文件内容,其他的参数可以选择输出的类型、内容等。现在我们需要编写一个c语言程序,并且在linux终端里使用myod test的代码来实现od同样的功能。

以下是我使用od指令与自己编写的myod程序对test文本文件进行显示16进制ASII值的操作。

除此以外,我还通过指令查找到了linux系统中od的源代码,在除了这次进行的基础myod变成以外,还可以通过学习源代码对myod进一步地加工,使得更加完善。本次习题只是要求输出16进制的:ASCII数,但是我同样可以选择输入不同指令输出其他类型的数,比如8进制、10进制等等输出形式。

我将od的源代码放入一个博客中分享给需要看的同学们。

od源代码


3.因为本次myod编写,我使用了一个函数就完成了该功能,所以没有使用静态库与动态库。对于静态库与动态库的使用,我在第二周的补交博客中详细完成了该内容,使用了娄老师给的mymath代码完成。


4.我对于Makefile的理解是一种动作,我们事先对这种动作进行定义,定义它编译的内容、顺序等信息,然后再在Linux终端里输入make指令执行该动作,即实现“自动化编程”。

makefile 介绍

make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序。

首先,我们用一个示例来说明makefile的书写规则。以便给大家一个感性认识。这个示例来源于gnu的make使用手册,在这个示例中,我们的工程有8个c文件,和3个头文件,我们要写一个makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:

1)如果这个工程没有编译过,那么我们的所有c文件都要编译并被链接。

2)如果这个工程的某几个c文件被修改,那么我们只编译被修改的c文件,并链接目标程序。

3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的c文件,并链接目标程序。

只要我们的makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。

在接触Makefile的时候,我选择了娄老师在实验楼里推荐的教程进行了学习,那个教程比较简单,也轻松地完成了要求地编译内容,但是当涉及到更深程度,比如myod的程序编译以及库的制作时,就需要更加详细的资料进行学习。

以下是我使用make指令调用Makefile实现编译的截图。


5.截图如上所示。


6.本周发表博客两篇,一篇是主要是将课堂上没完成的问题进行总结与解决(下面有链接),另一篇则是本篇博客,主要是为了完成课后布置的作业,希望老师能对我的学习完成情况进行指导。

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


学习中遇到的问题域解决方案

1.在编写myod的过程中如何读入文件?

解决方案:

一个c语言读写文件程序:

#include "stdio.h"
#include <stdlib.h>
main()
{
FILE *fp1;//定义文件流指针,用于打开读取的文件
FILE *fp2;//定义文件流指针,用于打开写操作的文件
char text[1024];//定义一个字符串数组,用于存储读取的字符
fp1 = fopen("d:\\a.txt","r");//只读方式打开文件a.txt
fp2 = fopen("d:\\b.txt","w");//写方式打开文件a.txt
while(fgets(text,1024,fp1)!=NULL)//逐行读取fp1所指向文件中的内容到text中
{
puts(text);//输出到屏幕
fputs(text,fp2);//将内容写到fp2所指向文件中
}
fclose(fp1);//关闭文件a.txt,有打开就要有关闭
fclose(fp2);//关闭文件b.txt
}

参考资料

20170531动手实践MyOD——20155312

跟我一起写Makefile:MakeFile介绍

2017-2018-1 20155313 《信息安全系统设计基础》 Myod的更多相关文章

  1. 2017-2018-1 20155326 《信息安全系统设计基础》第四周学习总结及myod改进版的补交

    2017-2018-1 20155326 <信息安全系统设计基础>第四周学习总结及myod改进版的补交 学习内容 补充完成课上没有完成的内容 学习教材附录A,第十章内容 参考别出心裁的Li ...

  2. 20155326 2017-2018-1 《信息安全系统设计基础》第2周学习及课堂总结myod

    20155326 2017-2018-1 <信息安全系统设计基础>第1次学习及课堂总结myod 虚拟机之前出了一些问题,然后我重新弄了一个新的虚拟机. 先在虚拟机里面安装了git. 安完以 ...

  3. 2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)

    2017-2018-1 20155305 <信息安全系统设计基础>第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客) 课堂提交题目要求 编写MyOD.java 用java ...

  4. 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现

    20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...

  5. 2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客

    2017-2018-1 20155232 <信息安全系统设计基础>第四周学习总结以及课上myod练习补充博客 课上myod练习 1 参考教材第十章内容 2 用Linux IO相关系统调用编 ...

  6. 2017-2018-1 20155318 《信息安全系统设计基础》第2周课堂实践、makefile、以及myod

    2017-2018-1 20155318 <信息安全系统设计基础>第2周课堂实践.makefile.以及myod 测试3-gdb测试 用gcc -g编译vi输入的代码 在main函数中设置 ...

  7. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod

    20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...

  8. 20155308&20155316 2017-2018-1 《信息安全系统设计基础》实验一

    20155308&20155316 2017-2018-1 <信息安全系统设计基础>实验一 此次实验我和黄月同学一起做了1.2.3.5项,第4项在实验课上做完了,但是没有按时提交. ...

  9. 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)

    2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...

随机推荐

  1. Oracle数据库日期格式转换操作

    1. 日期转化为字符串 (以2016年10月20日为例) select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')  strDateTime from dual; ...

  2. react实例:理解dva构建项目的原理

    请点击相应的步骤查看详情 我们首先搭建一个 dva Demo  项目(请参考react快速构建一个应用项目),然后逐步完成以下内容: 结构划分 设计 Model 组件设计方法 组件设计实践 添加 Re ...

  3. leetCode题解之Reshape the Matrix

    1.题目描述 2.分析 使用了一个队列. 3.代码 vector<vector<int>> matrixReshape(vector<vector<int>& ...

  4. oracle数据泵备份(Expdp命令)

    Oracle备份方式主要分为数据泵导出备份.热备份与冷备份三种,今天首先来实践一下数据泵备份与还原.数据泵导出/导入属于逻辑备份,热备份与冷备份都属于物理备份.oracle10g开始推出了数据泵(ex ...

  5. [翻译] M13ProgressSuite

    M13ProgressSuite https://github.com/Marxon13/M13ProgressSuite A set of classes used to display progr ...

  6. 定制controller转场动画

    定制controller转场动画 从iOS7开始就可以自由定制控制器间的转场动画了,以下实例描述最简单的定制方式,达到的效果如下所示: 为了实现这个效果需要这么多的文件-_-!!!! RootView ...

  7. 引用js文件

    在子模板里引用js文件的时候,需要把相应的.js文件放到static目录下,如引用static/jQuery/index.js文件: {% extends "base.html" ...

  8. Linux setenforce命令详解[SeLinux操作]

    SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统. 关闭SELinux 临时生效: 命令临时 ...

  9. MFC调试时可以,使用生产的exe时,显示未响应解决方案

    首先,使用release模式,生成解决方案和exe. 对生成的exe,选择属性,兼容性,win7,应用,即可解决. 此方法对debug无用

  10. js 判断图片是否加载完成

    1.根据url来加载图片: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /**  * 加载图片,直到加载完成后才调用回调函数  * @param url 后面读取图片流的u ...