2017-2018-1 20155313 《信息安全系统设计基础》第二周课堂实验
2017-2018-1 20155313 《信息安全系统设计基础》第二周课堂实验
实验一
0.每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
1.用Vi输入图中代码,并用gcc编译通过
2.在Vi中使用K查找printf的帮助文档
3.提交vi编辑过程截图,要全屏,包含自己的学号信息
解决方案
0.创建6个空文件,将图片中每个函数分别写入一个空文件中,并修改文件名,除了头文件后缀名为.h以外,其他的文件后缀名都为.c。
1.在该文件夹中启动终端,输入gcc -c *.c
,对文件夹中所有的.c文件进行编译,得到.o文件。
2.在文件夹中的终端输入vim main.c
,再次敲击回车显示该函数的编辑界面。第二步将光标移动到语句printf
上,然后输入大写K显示帮助文档。
3.截图如上所示。
实验二
1.用gcc进行预处理,编译,汇编,链接vi输入的代码
2.生成的可执行文件中要有自己的学号
3.提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
解决方案
1.在文件夹中打开终端,依次输入gcc -E main.c -o main.i
、gcc -S main.i -o main.s
、gcc -c main.s -o main.o
生成main.i
、main.s
、main.o
加上原本的main.c
一共四个文件,同时对add.c
、sub.c
、mul.c
、div.c
也进行操作。
2.在终端中输入gcc -o 学号 *.o
生成以学号为名的可执行文件,并输入./学号
运行程序。
3。截图如上所示。
实验三
1.用gcc -g编译vi输入的代码
2.在main函数中设置一个行断点
3.在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
3.提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
解决方案
1.打开终端输入gcc -g *.c -o test
生成一个可执行gdb文件test。
2.输入gdb test
进入gdb调试模式,再输入l显示test文件内容。
3.在test中写入一个for(i=0;i<5313;i++)
的空循环用来检测断点。在gdb调试窗口输入b main
在主函数第一行设置一个断点,然后再输入b 13 if i==2600
即在第2600次循环处设置另一个断点。再输入info break
显示断点信息,然后再输入r运行程序,遇到断点会显示断点内容,因为该循环设置为空,所以循环处断点没有内容显示。若再循环内设计一个计数器,循环内断点处会显示计数为2600。
4.截图如上所示。
实验四
1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
2.提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
解决方案
1.首先输入ar -cr mymath.a add.o sub.o mul.o div.o
建立一个静态库并把add.o
、sub.o
、mul.o
、div.o
复制进这个静态库里。然后再输入gcc -o prog main.c mymath.a
生成一个可执行文件prog。 接着输入gcc -c -g main.c
和gcc -o prog main.o ./mymath.a
(不太清楚这两步的作用,希望老师指点)就可以对prog进行gdb调试。之后的操作与上一个实验相似,对循环进行断点调试。
2.截图如上所示。
实验五
1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
2.提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
解决方案
1.在终端中输入gcc -shared -fpic -o mymath.so add.c sub.c mul.c div.c
,建立一个有四个c文件的共享库。再输入gcc -o prog2 main.c ./mymath.so
,生成一个可执行文件prog2。最后直接输入./prog2
便可以运行该文件。
2.截图如上所示。