您的位置:首页 > 其它

20155336 2017-2018 1 《信息安全系统设计基础》2017-9-27课堂实践

2017-12-05 18:43 357 查看

20155336 2017-2018 1 《信息安全系统设计基础》2017-9-27课堂实践

第一题:vi

每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号

用Vi输入图中代码,并用gcc编译通过

在Vi中使用K查找printf的帮助文档

提交vi编辑过程截图,要全屏,包含自己的学号信息

说起来很惭愧,第一次接触虚拟机,对很多地方都陌生,正好趁学习这门课程掌握一下虚拟机的基本操作。
首先创建一个文件夹,命名为text1。然后将第一道题的要求都录入进去。录入完毕后,输入`gcc *.c`,
发现了错误,然后`vi`进入到.c的文件中,修改了错误再次编译一遍,没有错误,然后就输出`./a.out`












代码链接

第二题:gcc测试

用gcc 进行预处理,编译,汇编,链接vi输入的代码

生成的可执行文件中要有自己的学号

提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

第二题,按照第一节课课上记得笔记,在课下自己实践。虽然中间粗心代码出现错误,但是问题不大








代码链接

第三题:gdb测试

用gcc -g编译vi输入的代码

在main函数中设置一个行断点

在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点

提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

这道题出现了很多问题,首先下载GDB,然后在设置了条件断点之后,程序调试的时候没有在断点处停下。在空循环中加个打印空行再设置条件断点然后运行就可以了。(中间由于很多次自己都忘记了编译~~~~~导致每次都会显示自己定义的n没有定义。)







代码链接

第四题:静态库测试

除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?

提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

这道题将自己的代码编译为以下形式:
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
gcc -c mul.c -o mul.o
gcc -c div.c -o div.o
然后使用ar创建一个存档文件:ar rcs mymath.a add.o sub.o mul.o div.o
编译的时候再将程序和mymath.a链接起来:gcc -static -o link1 main.o mymath.a
接着运行就可以了!






第五题:共享库

除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?

提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

创建一个共享文件
gcc -shared -fpic -o mymath.so add.c sub.c mul.c div.c
创建一个可执行的目标文件
gcc -o link2 main.c ./mymath.so
运行即可








代码链接

Makefile:

1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.

2 提交Make过程截图,要全屏,包含自己的学号信息

首先上网百度了一下makefile 到底是用来做什么的
答:makefile是规则,是编译,连接等的规则,是对整个工程进行编译、连接的规则。
自我理解就是在执行make之前,需要命名一个Makefile的特殊文件,告诉它需要完成什么任务,该怎么做,在文件里输入自己想要偷懒的地方,然后设置完之后,
make一下就可以了!








代码链接

Myod:

1 复习c文件处理内容

2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

main与其他分开,制作静态库和动态库

编写Makefile

5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

od -tx -tc的功能:就是在十六进制输出其ascii值的同时,显示对应的文件内容




代码:

#include"head.h"
void main(int argc,char *argv[])
{
char ch[16];
int a,j,i,x = 0;
int in=open(argv[1],O_RDONLY,0);

printf("%07o",0);
printf(" ");

while((a=read(in,ch,16))!=0)
{x++;

for(i=0;i<a;i++)
if(!iscntrl(ch[i]))
printf("%4x",ch[i]);
printf("\n");
printf("        ");

for(j=0;j<a;j++)
if(!iscntrl(ch[j]))
printf("%4c",ch[j]);
printf("%07o",16*(x-1)+a);
printf(" ");
}
close(in);
}

补充(参考结对同伴的博客 理解了老师的意思!)

通过这次的课堂实践我认识到我实现的是od -tc -tx的功能,而od -tc -tx1实现的功能是将内容以十六进制显示,并以一个字节为单位,两者的区别是多了一个1,如果tx后面没有参数,默认的是四字节为一组,如有参数SIZE,以SIZE字节为一组输出。修改代码后,实现od -tc -tx1功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐