# 2017-2018-1 20155323 《信息安全系统设计基础》第2周学习总结

20170927课堂测试

1.vi

要求:
0. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号

  1. 用Vi输入图中代码,并用gcc编译通过

  2. 在Vi中使用K查找printf的帮助文档

  3. 提交vi编辑过程截图,要全屏,包含自己的学号信息

课下把代码推送到代码托管平台**

第一次运行的时候我加错了学号,把学号放在了.c后面,导致无法编译。试了几次都无法成功,于是我重新vi新的.c和.h文件,但是打完之后编译的时候出现了"对main未定义的引用"这个问题。

我把之前打错的.c和.h删掉以后还是有这个问题

仔细想了一下我才发现是这个文件夹里还有一个昨晚我用来练手的hello.c文件,我把hello.c文件删除以后,果然能编译了。但是这个时候我运行的结果是错的。我把每个文件都打开找了一遍,才发现是我main.c中的scanf()语句中读取的格式是%d,%d但是我输入数字的格式却是 5 5,所以跑出的结果是错误的。我把这处错误更改完以后程序终于没问题了。

不过这个时候已经第二节课上了一半了,所以没有交上蓝墨云。

2.gcc测试

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

课下把代码推送到代码托管平台**

课上没来得及提交

3.gdb测试

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

课下把代码推送到代码托管平台**

由于虚拟机怎么设置都连不上网不能git,于是我在同学指导下下了VMware workstation 重装了一遍虚拟机,重新完成了前两个任务

接下来是在main.c中加入一个for循环,运行后如图

然后进入cgdb界面,输入b 7设置断点如图

退出后再进入cgdb界面输入b 7 if i==2662运行如图

4.静态库的测试

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

课下把代码推送到代码托管平台**

首先输入gcc -c add.c sub.c mul.c div.c 再输入ar rcs mymath.a add.o sub.o mul.o div.o 建立一个静态库并把add.osub.omul.odiv.o复制进这个静态库里。

接着输入gcc -static -o disige main.o ./mymath20155323.a生成一个可执行文件。

最后直接运行可执行文件disige即可。

5.共享库

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

课下把代码推送到代码托管平台**

首先输入gcc -shared -fpic -o mymath1.so add.c sub.c mul.c div.c

接着输入gcc -o mymath2 main.c ./mymath1.so

最后直接运行mymath2即可

6-Makefile

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

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

课下把Makefile推送到代码托管平台**

首先输入vim makefile编写makefile文件,然后make生成一个可执行文件testmymath,最后./testmymath运行该文件。

7-myod

1 复习c文件处理内容

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

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

  2. 编写Makefile

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

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

首先编写一个20155323.c文件

然后运行命令od -tx -tc 20155323.c得到以十六进制输出,默认以四字节为一组(一列)的结果。

再运行命令od -tx1 -tc 20155323.c得到以十六进制输出,每列输出一字节的结果。

补充

编写一个文件,然后编写myod.c,再对myod.c进行编译得到可执行文件a.out,最后文件1作为参数传入可执行文件a.out中运行得到结果。

课堂上遇到的问题就是对OD命令的运用不够熟练。

代码托管

posted @ 2017-10-01 21:34  刘威良  阅读(291)  评论(4编辑  收藏  举报