信息安全系统设计基础第二周学习总结
【学习思路:浏览实验楼实验内容并进行针对性学习,重点学习《嵌入式linux系统应用程序开发标准》中的内容。完成学习任务,认真提出问题。】
学习时间:13小时
学习收获:学习vim语法和命令;掌握gcc,gdb,makefile的使用方法和基本语法;掌握静态库,动态库的创建方法
一、实验楼实验(vim使用介绍)
1.知识点:
1)man -k <命令> 用于学习命令。
2)在vim中,:q!会舍弃所做的任何改动;按下A以启用编辑,按下esc退出;光标放在欲删除的单词处,按下dw可以删除单词;输入d$,删除从当前光标到文末;w,表示向前移动几个单词(不含该单词),而e表示移动到前面第几个单词(含本词);数字+dd,删除几行;按下p将最后一次删除的内容插入到光标所在位置的上方;输入r和一个字符,替换光标所在位置的字符;输入cw或者ce之后,可以改变单词直到单词末尾(ce是把光标所在的位置上的单词也删除);c$可以删除到行末;Ctrl +g可以查询当前行,用G跳到文末或者gg跳到文首之后,输入行号+G就可以返回;/后输入字符即可查找,按下n进行下一次查找;光标放在某{,(,[处,按下%可以查找配对的另一半;:s/old/new/g可以将整行中的单词进行替换;:%s/old/new/g可以将整个文档中的单词进行替换;:!知乎可以输入外部命令,即在vim中执行外部命令;按下v后,就可以选中部分文本了;:r FILENAME就可将文本内容粘贴到光标上方;输入大写的O,将在光标上方打开一行并进入插入模式,输入小写的o,将在光标下方打开一行并进入插入模式;输入a可在光标之后插入;按下R后,就可以连续替换多个字符;按下v后,可以在高光状态下选中文本,然后按下y复制,按下p粘贴;也可以直接在正常状态下按yw选中一个单词;在:set hls is之后,输入/单词 可以显示出文件中所有的待查找单词;:set ic之后,则不区分查找的大小写;按下tab键可以补全文件名。
3)大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
2.问题:
1)ctrl+R是刷新?并没有撤销撤销掉的命令。
(图1)
2)按照提示按下ctrl+d,并没有出现列表,而是出现收藏夹选项?(之前已经输入过 set nocp)
(图2)
二、实验楼实验(gcc,gdb,makefile使用介绍)
1.知识点:
1)gcc编译文件的流程:源文件—预处理—编译—汇编—链接—可执行文件
2)在.c->.i的时候不会进行语法检查,在.i->.o的时候才会进行
3)使用gdb进行调试:gcc –g XXX.c –o XXX后,输入 gdb XXX 即可进行调试; l——查看源代码;break 行数——设置断点;info break——查看断点信息;p 变量——打印变量值;bt——查看堆栈;c——继续执行;q——退出;n——不进入函数调试;s——进入函数调试;help [command]可以进行命令查找;delete [断点号]——删除所有断点;b 函数名——设置函数断点(函数不执行);b 行号或者函数 if 表达式 (条件断点)
4)makefile带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。
5)一个Makefile文件主要含有一系列的规则,每条规则包含一下内容:一个目标,即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如‘clean’;一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,并以tab开头(初学者务必注意:是tab,而不是空格) 执行以上Makefile后就会自动化编译
6)-C dir 读入指定目录下的makefile
2.操作
1)使用gcc进行编译
(图3)
2)使用gcc进行模块化编译
(图4)
3)使用gdb
(图5)
(下方截图表明,设置断点不恰当,可能会导致程序无法单步执行)
(图6)
4)使用Makefile
(下方为正常编译的结果)
(图7)
(下方为最初的输入,后将pro.p改正为prog.o)
(图8)
(上方为操作)
(图9)
3.问题:
1)(已经解决)已经编辑保存了hello.c文件,为什么显示“找不到”?阅读不仔细,输入应为 gcc hello.c –o hello
(图10)
(图11)
2)这里对gcc hello_print.c hello_main.c –o hello的解释中,最后一个命令的意思是什么?(猜测:是否是将这两个.o文件转换为一个可执行的,名称为hello的文件?)
(图12)
(图13)
三、学习《嵌入式linux系统应用程序开发标准》
1)vim有三种模式:命令行模式,底行模式,插入模式
2)预处理阶段——对头文件和宏进行处理。以gcc -E hello.c -o hello.i 为例,-E是是让gcc在预处理结束后停止编译;-o表示输出文件。 编译阶段——检查无误后,转换成汇编语言。 汇编阶段——把上一阶段的.s转换成目标文件 链接阶段-把函数的实现都放到函数库中。
3)-I dir 在头文件的搜索目录中加入dir。加上<>后,是在标准路径/user/include目录中搜索,加上“”是在本目录中搜索。
4)创建静态库 gcc -c 目标文件(.c)——>ar rcsv libname.a 目标文件.o (编译主程序)gcc -o 主程序名 主程序名.c -L lname 5)创建动态库 gcc -fPIC -Wall -c 目标文件.c——> gcc -shared -o libname.so 目标文件.o 编译主程序的命令同上 此外,还要注册动态路径 cp libname.so /lib
四、作业
1.作业
1)编写程序,并用gcc编译
(图14)
2)利用gdb调试
(图15)
查看源代码,设置断点
(图16)
让程序运行
(图17)
3)创建静态库
(图18)
4)动态库创建
(图19)
5)编写makefile
(图20)
2.问题:
1)输入数字(如 5,3之后无任何输出且无法退出?)
(图17)
源程序如下:
int main(void) {
printf("add:%d\n",add(a,b));
printf("sub:%d\n",sub(a,b));
printf("mul:%d\n",mul(a,b));
printf("div:%lf\n",div(a,b));
return 0;
}
2)静态库、动态库无法使用?与makefile出现的问题基本一致。“未定义”意味着什么?
(图21)
(图22)
(图23)