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. 聊一聊数组的map、reduce、foreach等方法

    聊聊数组遍历方法 JS 数组的遍历方法有好几个: every some filter foreach map reduce 接下来我们来一个个地交流下. every() arr.every(callb ...

  2. zTree自定义节点name显示样式

    //setting中配置属性 view: { showLine:false, dblClickExpand: true, showIcon: false, addDiyDom: addDiyDom / ...

  3. twemproxy源码分析

    twemproxy是twitter开源的redis/memcached 代理,数据分片提供取模,一致性哈希等手段,维护和后端server的长连接,自动踢除server,恢复server,提供专门的状态 ...

  4. 铁乐学Python_day07_集合and浅谈深浅copy

    1.[List补充] 在循环一个列表时,最好不要使用元素和索引进行删除操作,一旦删除,索引会随之改变,容易出错. 如果想不出错,可以采用倒着删除的方法,因为倒着删除进行的话,只是后面元素的位置发生了变 ...

  5. codeforces 547E Mike and Friends

    codeforces 547E Mike and Friends 题意 题解 代码 #include<bits/stdc++.h> using namespace std; #define ...

  6. Alpha 冲刺报告(10/10)

    Alpha 冲刺报告(10/10) 队名:洛基小队 峻雄(组长) 已完成:阿尔法版的ppt 明日计划:总结阿尔法版的问题 剩余任务:角色属性脚本的完整版本 困难:缺乏编码经验,编码进度比较慢 ---- ...

  7. python SQLAlchemy复习

    下面的代码主要使用SQLAlchemy的ORM思想实现查询单词的功能: 实现输入一个单词,查询出与输入单词接近的单词以及单词的意思. 主要有以下三步: 1.创建数据表 2.插入数据 3.查询数据 1. ...

  8. Oracle-本地连接没问题,远程连接有问题解决方式

    1. 问题 我的环境是oracle11gr2,本地用plsql还是toad连接都没有不论什么问题,而用别的机器远程连接就提示 无监听程序等错误. 2. 原因 oracle安装路径  --- 比如: F ...

  9. 1297. [SCOI2009]迷路【矩阵乘法】

    Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...

  10. ResultJsonInfo<T>

    using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace QY.We ...