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. JS + jQuery 实现元素自动滚动到底部,兼容IE、FF、Chrome

    HTML代码: <ul class="tasklog-dialog-ul" id="auto_to_bottom"> <li>删除虚拟机 ...

  2. 【转】证书的应用之一 —— TCP&SSL通信实例及协议分析(下)

    原文链接 前面两部分分别讲解了如何在.net程序中使用SSL实现安全通信以及SSL的通信过程,并通过抓包工具具体分析了ssl的握手过程,本文通过一个demo来模拟ssl协议,在TCP之上实现自己的安全 ...

  3. mysql 5.7数据库支持emoji符号但是程序总算报错Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F...' for column ...

    1.线上碰到个问题,端上切换搜狗输入法后,原来限制的表情符号还能输入.数据库使用的是5.7.22版本的,刚开始以为数据库不支持表情符号导致的,但是看了线上的数据库以及字段,都是支持的. show va ...

  4. 灰度图的直方图均衡化(Histogram Equalization)原理与 Python 实现

    原理 直方图均衡化是一种通过使用图像直方图,调整对比度的图像处理方法:通过对图像的强度(intensity)进行某种非线性变换,使得变换后的图像直方图为近似均匀分布,从而,达到提高图像对比度和增强图片 ...

  5. 如何判断一个整数是否是2的N次幂

    static bool CheckPowerOfTwo(ulong num) { && (num & (num - )) == ; }

  6. Linux为grub菜单加密码

    为grub菜单加密码 加入密码后,再次进入单用户或者给下次管理grub需要输入密码 加密操作 /sbin/grub-md5-crypt # 之后输入2次密码会生成加密后字符串 编辑grub加载文件 v ...

  7. Error 'LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or cor

    转自:http://blog.csdn.net/junjiehe/article/details/16888197 采用红字方法可行,后来采用cmake生成sln文件时,又出现了该问题,采用了玫红色字 ...

  8. shell study

    目录 shell记录 执行脚本 变量使用 注释 shell传递参数 运算符 echo printf test 流程控制 if ... else ... for while until case 跳出循 ...

  9. 企业生产环境集群稳定性-HA就行吗?

    在企业生产中,集群一旦运行,是要尽可能的将损失降到最低,现在所有的大数据技术都有HA,spark的.Hadoop的.HBase的等等, HA分冷备和热备,热备是集群自带的,冷备就是硬件的. 这样一种情 ...

  10. ZT Android4.2蓝牙基础架构学习

    Android4.2蓝牙基础架构学习 分类: Jellybean Bluetooth Bluetooth 2013-10-13 23:58 863人阅读 评论(3) 收藏 举报 androidblue ...