2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结
教材学习总结
有关vim
- 打开方式:
vim [文件名]
- 按
i
会进入insert模式,可以对代码进行编辑 按
Esc
会进入普通模式,此时可以使用快捷键进行编辑,编辑方式为:指令 对应操作 h 向左移动光标 l 向右移动光标 j 向下移动光标 k 向上移动光标 w 移动到下一个单词 vim
的退出与保存
保存并退出 | 不保存并退出 |
---|---|
:wq +回车键 | Esc +q! |
Esc +Shift +zz | 无 |
有关gcc
- 明白编译过程
文本类型 | 作何处理 | 所用的gcc指令(当前文件类型指向待生成类型 |
---|---|---|
hello.c 源程序 | 预处理(cpp) | gcc -E hello.c -o hello.i |
hello.i 修改过的源程序 | 编译处理(ccl) | gcc -S hello.i -o hello.s |
hello.s 汇编程序 | 汇编处理(as) | gcc -c hello.s -o hello.o |
hello.o 可重定位的二进制目标程序 | 链接(ld) |
最终得到可执行的二进制目标程序hello
具体题目操作
题目一:vi
- 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
- 用Vi输入图中代码,并用gcc编译通过
- 在Vi中使用K查找printf的帮助文档
- 提交vi编辑过程截图,要全屏,包含自己的学号信息
操作前准备:
将头文件放在如下地址:
文件脉络图:
将
.c
文件放在src
中具体操作:
键入的指令:
gcc -I/home/tx20165221/gcc.include
选择生成静态库:
键入指令 | 运行结果 |
---|---|
gcc -c -I/home/tx20165221/gcc.include add.c sub.c mul.c div.c | 生成.o 文件 |
ar rcvs libmath.a add.o sub.o mul.o div.o | 生成静态库 |
gcc main.c -omain -I/home/tx20165221/gcc.include -L. -lmath | 生成可执行文件main |
./main | 运行文件 |
运行结果截图
遇到的问题
- 问题一:找不到头文件的位置
问题一解决办法:在后台找到头文件,右键查看其属性
- 问题二:编译运行失败
问题而解决方法:输入指令
gcc main.c -omain -I/home/tx20165221/gcc.include -L. -lmath
漏掉了了L
后的.
题目二:gcc测试
- 用gcc 进行预处理,编译,汇编,链接vi输入的代码
- 生成的可执行文件中要有自己的学号
- 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
具体操作
文本类型 | 作何处理 | 所用的gcc指令(当前文件类型指向待生成类型 |
---|---|---|
hello.c 源程序 | 预处理(cpp) | gcc -E main.c -o main.i |
main.i 修改过的源程序 | 编译处理(ccl) | gcc -S main.i -o main.s |
main.s 汇编程序 | 汇编处理(as) | gcc -c main.s -o main.o |
main.o 可重定位的二进制目标程序 | 链接(ld) |
键入./main
运行
运行结果截图:
.o
文件
- 最终运行截图
题目三:gdb测试
- 用gcc -g编译vi输入的代码
- 在main函数中设置一个行断点
- 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
具体操作:
设置断点
- 函数:
b 文件名.c:函数名
- 行:
b 行数
- 条件:
b 行数 if 表达式(例如:b 9 if == 12)
- 临时:
tb [文件名:]行号或函数名 <条件表达式>
实践过程
gcc -g *.c -o main
gdb main
b main
b 6 if i==5221
info break
r
q
运行截图:
题目四:静态库的测试
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
- 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
实践过程
ar cr math.a add.o sub.o mul.o div.o
gcc main.c ./math.a -o main
运行截图:
题目五:共享库
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
具体操作
共享库的生成:
gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
;
共享库的使用
gcc -o main main.c -L. -lxxx
实际操作:
- 生成:
gcc -fPIC -c add.c sub.c mul.c div.c
gcc -shared -o libmymath.so add.o sub.o mul.o div.o
使用:gcc -o main main.c -L. -lmymath
运行截图:
题目六:Makefile
写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
提交Make过程截图,要全屏,包含自己的学号信息
具体操作
makefile文件编写规则:
目标文件 :由make创建,通常是目标文件或可执行文件
依赖文件 :创建目标体所依赖的文件
运行命令 :创建每个目标体时需要的运行命令,必须以tab键开头,格式为:目标文件:依赖文件列表 [tab键]各目标体运行命令(注意不是空格)
使用make的格式:make目标文件
实际操作:
- 输
入vim Makefile
,输入i进入编辑模式,输入代码并保存 - 输入
make
, 进行自动化编译 - 执行
./testmymath
查看结果 运行结果和编写的
makefile
截图:
代码统计
- 上学期的
statistics.sh
被自己删了,在网上查找代码统计方法,键入sudo apt-get install cloc
下载安装,即可。