2018-2019-1 20165322 《信息安全系统设计基础》第一周学习总结

课堂笔记及学习笔记

测试练习

测试一

  • 用Vi输入图中代码,并用gcc编译
    • 通过在src目录下输入命令行gcc -I/头文件所在路径 *.c -o ../bin main完成编译。

  • 在Vi中使用K查找printf的帮助文档
    • 在文件夹中的终端输入vim main.c,再次敲击回车进入该函数的编辑界面。
    • 将光标移动到printf语句上,然后输入大写K显示帮助文档。

测试二

  • 用gcc进行预处理,编译,汇编,链接vi输入的代码
    • 预处理: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

测试三

  • 1.用gcc -g编译vi输入的代码
    2.在main函数中设置一个行断点
    3.在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
    • 打开终端输入gcc -g *.c -o test生成一个可执行gdb文件test
    • 输入gdb test进入gdb调试模式,再输入l显示test文件内容。
    • 在test中写入一个for(i=0;i<5322;i++)的空循环用来检测断点。
    • 在gdb调试窗口输入b main在主函数第一行设置一个断点
    • 输入b 6 if i==2661即在第2661次循环处设置另一个断点。
    • 输入info break显示断点信息
    • 输入r运行程序,遇到断点会显示断点内容,因为该循环设置为空,所以循环处断点没有内容显示。

测试四

  • 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?提交静态库生成和调用过程截图(一定包含条件断点的)
    • 输入gcc -c -I/头文件所在路径 add.c sub.c mul.c div.c生成.o文件
    • 输入ar rcvs libmymath.a add.o sub.o mul.o div.o生成静态库
    • 输入gcc main.c -o main -I/头文件所在路径 -L.-lmymath生成可执行文件main

测试五

  • 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
    • 输入gcc -fPIC -I/头文件所在路径 add.c sub.c mul.c div.c生成.o文件
    • 输入ar shared libmymath.so add.o sub.o mul.o div.o生成静态库
    • 输入gcc main.c -o main -I/头文件所在路径 -L.-lmymath生成可执行文件main

测试六

  • 写出编译上面vi编辑代码的makefile(注意gcc前用tab键填充),编译出来的目标文件为testmymath, 只用显式规则就可以
    • 新建文件makefile,编辑代码
testmymath:main.o add.o sub.o mul.o div.o
	gcc main.o add.o sub.o mul.o div.o -o testmymath
main.o:main.c head.h
	gcc -c main.c
add.o:add.c head.h
	gcc -c add.c
sub.o:sub.c head.h
	gcc -c sub.c
mul.o:mul.c head.h
	gcc -c mul.c
div.o:div.c head.h
	gcc -c div.c
  • 在命令行输入make生成目标文件testmymath

学习中问题及解决

  • 问题1:

  • 解决方法:在main.c中加入头文件引用#include'head.h'

  • 问题2:

  • 解决方法:将makefile放入src文件夹中,并在src路径中输入make

posted @ 2018-09-23 23:18  icream  阅读(254)  评论(0编辑  收藏  举报