2018-2019-1 20165325 《信息安全系统设计基础》第一周学习总结
2018-2019-1 20165325 《信息安全系统设计基础》第一周学习总结
一、学习笔记
1. vim简单用法
- i:在光标处插入
- I:在行首插入
- a:在光标下一个字符处插入
- A:在行尾插入
- esc:切换到正常模式
- shift+zz:保存退出
- :w 退出
- :q 退出
- :wq 保存并退出
2. 预处理、编译、汇编
- 预处理主要是C语言编译器对各种预处理命令进行处理,包括头文件的包含、宏定义的扩展、条件编译的选择等;执行
hello.c
的预处理:gcc -E hello.c -o hello.i
; - 编译把源代码翻译成中间语言,即汇编语言;执行
hello.i
的编译:gcc -S hello.i -o hello.s
; - 汇编把汇编代码翻译成了机器代码,即目标代码;执行
hello.s
的汇编:gcc -c hello.s -o hello.o
;
3. Linux命令复习
- 删除文件 temp.o :
rm temp.o
- 删除文件夹/目录 temp :
rm -rf temp
二、班课作业
1、测试1 -vi
作业要求
- 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
- 用Vi输入图中代码,并用gcc编译通过
- 在Vi中使用K查找printf的帮助文档
- 提交vi编辑过程截图,要全屏,包含自己的学号信息
- 把代码推送到代码托管平台
我的解答
1.用vi编辑代码如图所示:
2.vi中使用K查找printf的帮助文档(用光标指在printf行,键盘单击K,查找printf的帮助文档),如图所示:
3.运行结果如图所示(输入2016 5325):
码云链接:https://gitee.com/maxeyscodes/IS_20165325
2、测试2-gcc测试
作业要求
- 用gcc 进行预处理,编译,汇编,链接vi输入的代码
- 生成的可执行文件中要有自己的学号
- 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
- 代码推送到代码托管平台
我的解答
vi输入的代码如图所示;
预处理,编译,汇编,运行过程截图如图所示;
码云链接:https://gitee.com/maxeyscodes/IS_20165325
3、测试3-gdb测试
作业要求
- 用gcc -g编译vi输入的代码;
- 在main函数中设置一个行断点;
- 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点;
- 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
- 代码推送到代码托管平台;
我的解答
第一个行断点设置在行5,条件断点在行8,stop only if i==2600;
代码截图如图所示:
调试截图如图所示:
码云链接:https://gitee.com/maxeyscodes/IS_20165325
4、测试4-静态库的测试
作业要求
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
- 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
- 代码推送到代码托管平台;
我的解答
调用mymath.a静态库如图所示:
生成mymath.a静态库截图如图所示:
码云链接:https://gitee.com/maxeyscodes/IS_20165325/tree/master/
5、测试5-共享库
作业要求
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
- 代码推送到代码托管平台;
我的解答
生成及调用过程如图所示;
码云链接:https://gitee.com/maxeyscodes/IS_20165325/tree/master/
6、测试6-Makefile
作业要求
-
写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
-
提交Make过程截图,要全屏,包含自己的学号信息
-
代码推送到代码托管平台;
我的解答
make过程截图如图所示;
makefile代码如图所示;
码云链接:https://gitee.com/maxeyscodes/IS_20165325/tree/master/
三、问题日志
1、条件断点调试
问题描述
GDB调试过程中遇到条件断点无法停下。
问题分析
条件断点的设置为:
break 8 if i==2600 //在第八行,stop only if i==2600
第八行代码为:
for (i = 0;i < 5325;i++){
解决方案
怀疑是该行i的复杂变动影响了断点正常工作,修改为:
for (i = 0;
i < 5325;
i++){
断点设置在i<5325
处,能正常运行;
疑点
其他同学好像,没有遇到这种问题,另外网上的博客也没有出现这种问题,原因暂未深究。