20165324 《信息安全系统设计基础》 第一周
第一章计算机系统漫游知识点学习
gcc编译器与静、动态库
- 命令格式:
gcc [选项] [文件名]
及常见编译选项:
- -E:仅执行编译预处理。
- -S:将C代码转换为汇编代码。
- -c:仅执行编译操作,不进行连接操作。
- -o:指定生成输出文件。
- -I(大写i):指定头文件目录。
- -l:指定程序要链接的库。
- -L:指定库文件所在的目录名。
- 编译过程:
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180928154134659-974981072.png)
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello
//或者直接输入:
gcc hello.c -o hello
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180928154204708-474474278.png)
- 静态函数库:名字一般为libxxx.a,整合整个函数库的所有数据进目标代码中,文件较大。
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180928154236212-627480166.png)
- 动态函数库:名字一般为libxxx.so,程序运行环境必须提供相应的库。
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180928154245264-507685977.png)
调试器gdb
- 使用-g编译选项的gcc命令来编译源程序。如:
gcc -g test.c -o test
。
- 通过
gdb test
来启动gdb。gdb调试的是可执行文件。
- 使用介绍:
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180928154319062-1541681915.png)
Makefile
- Makefile关系工程的编译规则,好处是自动化编译。
- 书写规则:targets为文件名,command为命令行,必须以[Tab键]开头,prerequisites为目标所依赖的文件(目标)。
targets: prerequisites
command
- 变量的使用:定义一个变量,需要在一行的开始定义这个变量(一般大写),后面跟一个-号,=号后面即为设定的变量值。使用变量,用一个$符号来引用变量,变量名需要放在$后的()里。如:
objects=main.o add.o sub.o div.o mul.o
$(objects)
蓝墨云任务
任务一:
- 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
- 用Vi输入图中代码,并用gcc编译通过
- 在Vi中使用K查找printf的帮助文档
- 提交vi编辑过程截图,要全屏,包含自己的学号信息
- 把代码推送到代码托管平台
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180923202649740-1230722952.png)
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180923202656700-1532950060.png)
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180923202754650-145623319.png)
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180923203306964-1119802297.png)
任务二:
- 用gcc 进行预处理,编译,汇编,链接vi输入的代码
- 生成的可执行文件中要有自己的学号
- 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
- 代码推送到代码托管平台
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180923210229776-1380351891.png)
任务三:
- 用gcc -g编译vi输入的代码;
- 在main函数中设置一个行断点;
- 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点;
- 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
- 代码推送到代码托管平台;
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180923215809061-2083127328.png)
任务四:
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
- 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
- 代码推送到代码托管平台;
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180924105819841-1963438567.png)
任务五:
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
- 代码推送到代码托管平台;
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180924111607462-1189142722.png)
任务六:
- 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
- 提交Make过程截图,要全屏,包含自己的学号信息
- 代码推送到代码托管平台;
![](https://img2018.cnblogs.com/blog/1290756/201809/1290756-20180924131213304-1458743112.png)