信息安全系统设计基础第二周学习总结

    信息安全系统设计基础第二周学习总结

【学习思路:浏览实验楼实验内容并进行针对性学习,重点学习《嵌入式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)   

     

 

posted @ 2015-09-27 10:10  5216  Views(236)  Comments(1Edit  收藏  举报