2017-2018-1 20155308 《信息安全系统设计基础》第二周测试(课上+课下)

2017-2018信息安全系统设计基础

课堂测试

这次课堂测试我的前四项都已经完成,但是感觉自己对Linux环境还是不太了解,所以写了这篇博客总结一下这次课堂测试做题的方法和注意事项

  • 1-vi
    要求:
  1. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
  2. 用Vi输入图中代码,并用gcc编译通过
  3. 在Vi中使用K查找printf的帮助文档

这一个问题是要求我们会用命令行建立新的文件,并在文件中打入代码。方法是使用vi命令,如下图所示,如果要建立head.h,则直接打入vi head.h即可。

在进入head.h文件中,输入文件中的代码,然后退出文件的方式是:先敲一下“Esc”,然后在下面打入"qw"(退出写代码)。

然后就可以回到新建文件的页面,继续新建文件了。

  • 2-gcc测试
  1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码
  2. 生成的可执行文件中要有自己的学号
  3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

这个问题在课上讲过,下面是程序被其他程序翻译成不同的格式的命令

  1. hello.c->hello.i 预处理

gcc -E hello.c -o hello.i
2. hello.i->hello.s 编译

gcc -S hello.i -o hello.s
3. hello.s->hello.o 汇编

gcc -c hello.s -o hello.o

  1. hello.o->hello

  • 3-gdb测试
  1. 用gcc -g编译vi输入的代码
  2. 在main函数中设置一个行断点
  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

在Linux中共有四种断点:函数断点、行断点、临时断点、条件断点。其中条件断点格式是“b if...”,例如"b 12 if i==5000"就是在第12行设置一个断点。

要进行gdb测试,首先要进行把调试信息加到可执行文件中。

然后对gdbtest进行gdb调试

输入“l”显示文件中内容

然后设置断点,进行输出

  • 4-静态库的测试
  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

ar rcs xxx.a xxx.o

r:在库中插入模块(替换)。
c:创建一个库。
s:创建目标文件索引,这在创建较大的库时能加快时间。

2.gcc -static 静态编译可执行文件,避免使用动态库的方式。

  • 5-共享库
  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

建立一个有四个c文件的共享库。再输入"gcc -o xxx main.c ./mymath.so",生成一个可执行文件。最后运行该文件。

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

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

我在实验楼中学习了Makefile的知识。
https://www.shiyanlou.com/courses/24/labs/138/document
而makefile带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。make是一个命令工具,是一个及时makefile中命令的工具程序。
首先

$ vim Makefile
test: prog.o code.o
        gcc prog.o code.o -o test
prog.o: prog.c code.h
        gcc -c prog.c -o prog.o
code.o: code.c code.h
        gcc -c code.c -o code.o
clean:
        rm -f *.o test

有了这个Makefile,不论什么时候修改源文件,只要执行一下make命令,所有必要的重新编译将自动执行。make程序利用Makefile中的数据,生成并遍历以test为根节点的树;现在我们以上面的实例,来学习一下Makefile的一般写法:

test(目标文件): prog.o code.o(依赖文件列表)
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)

Myod

我还没有写出来这个代码,正在努力中。。。

遇到的问题

问题一:我在虚拟机上建立git的时候,出现了不能建立的提示。我查找了胡东辉学长的博客
http://www.cnblogs.com/rebrust/p/5348866.html
打开命令行模式,输入如下指令

git config --global user.name "你的用户名" 
git config --global user.email "你的邮箱地址"
ssh-keygen -t rsa -C "youreamil@xxx.com"

然后设置ssh公钥。我跟着胡东辉学长博客进行设置:“你的当前用户文件夹下生成一个名为.ssh的文件夹,用记事本打开该文件夹中名为id_rsa.pub的文件并复制里面的全部内容”。之后我找了半天这个文件,都没有找到,然后自己手打的公钥,检查了好几遍,还是公钥错误最后发现这个文件在隐藏文件中。

在添加公钥后,进行

ssh -T git@git.oschina.net
git init
git remote add origin http://git.oschina.net/你的用户名/你的项目名.git
git pull origin master
git add .
git commit -m "提交的描述信息"
git push origin master

这个顺序建立git就没有问题了。

总结

这次的课堂实验测试了我们上一次课堂学习的内容,感觉我自己做笔记很认真,但是因为课下练习不足,所以才完成了前四项,而且完成的程度也不太好。通过课下练习,我重新学习了linux环境下的命令,然后对linux基础进行了温习
https://www.shiyanlou.com/courses/1
感觉轻松了不少。

原文地址:https://www.cnblogs.com/JIUSHA/p/7617785.html