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

课堂提交补充

第二周测试4-静态库的测试

因为对静态库的学习不够到位,所以未能完成提交。课后认真学习了教材第七章中关于静态库生成与链接的部分,完成了这个任务。

  • 首先使用AR工具创建加减乘除四个模块的静态库:

    gcc -c add.c sub.c mul.c div.c

    ar rcs mymath.a add.o sub.o mul.o div.o

  • 然后编译和链接main.o和mymath.a:

    gcc -c main.c

    gcc -static -o zyq20155328 main.o ./mymath.a

  • 最后运行程序,结果如下:

第二周测试5-共享库

  • 首先调用编译器驱动程序,创建共享库:

    gcc -shared -fpic -o mymath.so add.c sub.c mul.c div.c

    gcc -o share5328 main.c ./mymath.so

  • 然后运行程序,结果如下:

编写myod.c

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

Linux下od -tc的功能为输出字符对应的ASCII码,od -tx1表示十六进制输出。

Linux中自带命令实现的图如下:

用C语言编程实现od -tx1-tc的功能,我对程序的设想如下:

  • 在main函数中读取文件并将文件中的字符存储到一个字符数组中,把字符数组的长度(整型)以及数组名作为参数传给myod函数;

  • 在myod函数中,根据数组下标号判断是否到了一行(16个字符)末尾,若到了末尾换行,并输出这一行的十六进制值。

在codeblock中运行的结果如下:

结果在虚拟机中出现了这样的错误,查询资料说是给数组分配的内存过大,但修改了内存也并无用。待解决。

实现makefile

先用vim创建makefile,输入如下代码:

testmymath: main.o add.o sub.o mul.o div.o 
gcc main.o add.o sub.o mul.o div.o -o testmymath
main.o: main.c head.h
gcc -c main.c
add.o: add.c head.h
gcc -c add.c
sub.o: sub.c head.h
gcc -c sub.c
mul.o: mul.c head.h
gcc -c mul.c
div.o: div.c head.h
gcc -c div.c

之后make时出现如下错误:

后来发现须用Tab键规范以gcc开头的那几行代码,修改之后运行成功: