20165324 《信息安全系统设计基础》 第一周
第一章计算机系统漫游知识点学习
gcc编译器与静、动态库
- 命令格式:
gcc [选项] [文件名]
及常见编译选项: - -E:仅执行编译预处理。
- -S:将C代码转换为汇编代码。
- -c:仅执行编译操作,不进行连接操作。
- -o:指定生成输出文件。
- -I(大写i):指定头文件目录。
- -l:指定程序要链接的库。
- -L:指定库文件所在的目录名。
- 编译过程:
gcc -E hello.c -o hello.igcc -S hello.i -o hello.sgcc -c hello.s -o hello.ogcc hello.o -o hello//或者直接输入:gcc hello.c -o hello
- 静态函数库:名字一般为libxxx.a,整合整个函数库的所有数据进目标代码中,文件较大。
- 动态函数库:名字一般为libxxx.so,程序运行环境必须提供相应的库。
调试器gdb
- 使用-g编译选项的gcc命令来编译源程序。如:
gcc -g test.c -o test
。 - 通过
gdb test
来启动gdb。gdb调试的是可执行文件。 - 使用介绍:
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编辑过程截图,要全屏,包含自己的学号信息
- 把代码推送到代码托管平台
任务二:
- 用gcc 进行预处理,编译,汇编,链接vi输入的代码
- 生成的可执行文件中要有自己的学号
- 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
- 代码推送到代码托管平台
任务三:
- 用gcc -g编译vi输入的代码;
- 在main函数中设置一个行断点;
- 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点;
- 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
- 代码推送到代码托管平台;
任务四:
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
- 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
- 代码推送到代码托管平台;
任务五:
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
- 代码推送到代码托管平台;
任务六:
- 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
- 提交Make过程截图,要全屏,包含自己的学号信息
- 代码推送到代码托管平台;