2018-2019-1 20165336 《信息安全系统设计基础》第一周学习总结
一:学习知识点
1.ctrl+alt+t 打开命令行窗口
2.编辑vim,编译gcc,调试gdb
3.vi XX.c(文件名)
4.i/esc 控制插入
5.X 删除
6.a.out 为可执行文件
7.预处理,编译,汇编,链接
预处理:gcc -E xx.c -o xx.i
编译:gcc -S xx.i -o xx.s
汇编:gcc -c xx.s -o xx.o
链接:gcc xx.o -o xx
8.创建文件夹mkdir project,其中包含src,include,lib,bin
9.vim中dd删除行
10.DRY原则 don‘t repeat yourself
11.头文件申明注意要小写
12.申明头文件在哪用-I
13.XX.C模块是为了实现,XX.H模块是接口
14.静态库xx.a 动态库xx.so
二:班课作业
1、测试1 -vi
作业要求
1.每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
2.用Vi输入图中代码,并用gcc编译通过
3.在Vi中使用K查找printf的帮助文档
4.提交vi编辑过程截图,要全屏,包含自己的学号信息
5.把代码推送到代码托管平台
解决过程:通过gcc -c xx.c -o xx.o完成编译,在vim中再有printf行处按shift+K查找
图片:
2、测试2-gcc测试
作业要求
1.用gcc 进行预处理,编译,汇编,链接vi输入的代码
2.生成的可执行文件中要有自己的学号
提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
3.代码推送到代码托管平台
解决过程:运用预处理,编译,汇编,链接 -ESC -iso完成
图片:
3、测试3-gdb测试
作业要求
1.用gcc -g编译vi输入的代码;
2.在main函数中设置一个行断点;
3.在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点;
4.提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
5.代码推送到代码托管平台;
解决过程:运用 gcc -g xx.c -o xx,然后gdb xx文件进行调试,其中b+行数 设置断点,b+行数+if+条件为设置条件断点,r为运行到断点,c为从一个断点运行到下一个断点
图片:
4、测试4-静态库的测试
作业要求
1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
2.提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
3.代码推送到代码托管平台;
解决过程:参考静态库与动态库的区别
图片:
5、测试5-共享库
作业要求
1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
2.提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
3.代码推送到代码托管平台;
解决过程:参考静态库与动态库的区别
图片:
6、测试6-Makefile
作业要求
1.写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
2.提交Make过程截图,要全屏,包含自己的学号信息
3.代码推送到代码托管平台;
图片:
三、课下测试代码托管
课下测试:MyOD
学习资料
-A:指定地址基数,od命令的输出最左侧的1列为偏移量。默认的偏移量使用8进制,可以使用-A进行修改。
格式为:-A 参数.可以使用的参数有:d:十进制;o:八进制;x:十六进制;n不显示偏移量这一列。
-j:文件打开时,跳过的字节数量。
格式为:-j BYTES.BYTES是一个数值,用0开头表示8进制,用0x开头表示16进制,用b作为后缀表示1个字节,用k作为后缀表示1024个字节,用m作为后缀表示1048576个字节。
-N:用于限制输出的字节的数量
格式为:-N BYTES.BYTES的格式同上。
-S:用于指定输出的串占多少个图形字符的位置
格式为:-S BYTES.
-t:选择输出格式。
格式为:-t [acdfoux][size].
a:每个ASCII码对应的名字。
b:用八进制字节表示的字符对应的ASCII码值
d:有符号数值,SIZE个字节
f:浮点数,SIZE个字节
o:八进制数,SIZE个字节
u:无符号数值,SIZE个字节
x:十六进制数,size个字节
注意:这里的SIZE是一个数值或者是一个字母。字母的范围为:[CSILFD]。对于非f类型的,一般选择CSIL.其中C表示sizeof(char),S表示sizeof(short),I表示sizeof(int),L表示sizeof(long).如果类型为f,sizeof可以是F或者是D,分别表示sizeof(float)或者sizeof(double).
可以使用传统的格式:分别为:
-a:等价于 -t a.表示ASCII码的名字
-b:等价于-t o1,选择单字节,并且按照3个数值位的八进制数进行解释
-c:等价于-t c,选择ASCII码字符或者是转义字符
-d:等价于-t u2:选择无符号2字节单位
-f:等价于-t fF,选择单精度浮点数
-i:等价于-t dI,选择十进制整型
-l:等价于-t dL,选择十进制长整型
-o:等价于-t o2,选择两个字节的单元并按照八进制进行解释
-s:等价于-t d2,选择两字节单元并按照十进制解释
-x:等价于-t x2,选择两个字节单元,并作十六进制解释
-v:不用*代替重复的输出
-w:用于设置每行的宽度,即每行上输出的字节数
四、出现的问题
1.gdb 调试中出现断点错误的情况,解决方法:在循环语句中加入语句。
2.动态库中找不到testmymath.so文件,解决办法:调用sodu mv testmymath.so usr/lib解决
五、总结
通过这一周的学习,我深入了解了gcc有关的知识,通过不断地遇到问题解决问题,加深了我对本周知识的理解,掌握了动态库与静态库的知识,在做测试中提高了我的动手能力,更加使我自己知道了自己动手解决完问题是有很大的成就感的,我相信这对我以后的学习很有帮助。