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

第三周(9.21-9.27):

学习计时:共xxx小时

读书:

代码:

作业:

博客:

一、学习目标

1. 熟悉Linux系统下的开发环境   
2. 熟悉vi的基本操作   
3. 熟悉gcc编译器的基本原理   
4. 熟练使用gcc编译器的常用选项   
5 .熟练使用gdb调试技术   
6. 熟悉makefile基本原理及语法规范   
7. 掌握静态库和动态库的生成

二、学习资源

 

1. 教材:第一章,第七章

2. 《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5

3. 课程资料:https://www.shiyanlou.com/courses/413   实验二,课程邀请码:W7FQKW4Y

4. Vim编辑器:https://www.shiyanlou.com/courses/2

5. Linxu系统编程:https://www.shiyanlou.com/courses/24,实验2、3、4

6. 教学视频:http://pan.baidu.com/s/1kTHxOFl ,可以参考第十个视频

三、学习方法

 

1.  进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。

2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第二周学习总结”

 

四、学习任务

(提示:请将要求学生完成的任务、测验或思考题列在此处)

1.教材第一章,第七章学习:阅读并消化教材内容(有部分考试内容)

2.《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5的学习(本周大部分考试内容都从这出,特别是与教材重复内容)

3.完成实验并发Blog

 

  • 练习vimtutuor 至少一遍 
  • 使用vim 输入以下代码,联系使用“K”查找帮助文档:

 

 

  • 练习gcc编译运行代码。 
  • 练习gdb调试代码 。
  • 把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so。 
  • 编写makefile,让代码编译,上述静态库和共享库的使用自动化。

 

 

五、后续学习预告(可选):

教材第二章《信息的表示和处理》

六、学习过程

(提示:此处由学生填写,学习过程,学习笔记,代码编译,运行结果,思考等)

1. 重要知识点总结梳理:

vim部分

1、Vim的6种基本模式:

  • 普通模式(Normal mode):在普通模式中,进入插入模式比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
  • 插入模式(Insert mode):在插入模式中,可以按ESC键回到普通模式。
  • 可视模式(Visual mode):命令多与字母v有关
  • 选择模式(Select mode)
  • 命令行模式(Command line mode):在命令行模式中,执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
  • Ex模式(Ex mode):这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

常用的是普通模式、插入模式和命令行模式。

2.三种常用模式的切换

1)vim启动进入普通模式;

2)处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式;

3)普通模式中按i(插入)或a(附加)键都可以进入插入模式;

4)普通模式中按:进入命令行模式;

5)命令行模式中输入wq回车后保存并退出vim。

3、进入vim

1)在终端中输入 vim 文件名;

2)在终端中输入vim,进入vim界面中,进入命令行模式输入:e  文件路径(文件名)。

 

4、游标移动

在普通模式下,有以下规则:

按键

说明

h

l

右(小写L)

j

k

w

移动到下一个单词

b

移动到上一个单词

5、进入插入模式

在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入

命令

说明

i

在当前光标处进行编辑

I

在行首插入

A

在行末插入

a

在光标后插入编辑

o

在当前行后插入一个新行

O

在当前行前插入一个新行

cw

替换从光标所在位置后到一个单词结尾的字符

6、命令行模式下保存文档

从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下

7、退出vim

1)命令行模式下退出vim

从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑

以下为其它几种退出方式:

命令

说明

:q!

强制退出,不保存

:q

退出

:wq!

强制保存并退出

:w <文件路径>

另存为

:saveas 文件路径

另存为

:x

保存并退出

:wq

保存并退出

2)普通模式下退出vim

普通模式下输入Shift+zz即可保存退出vim

8、删除文本

1)普通模式下删除vim文本信息

进入普通模式,使用下列命令可以进行文本快速删除:

命令

说明

x

删除游标所在的字符

X

删除游标所在前一个字符

Delete

同x

dd

删除整行

dw

删除一个单词(不适用中文)

d$或D

删除至行尾

d^

删除至行首

dG

删除到文档结尾处

d1G

删至文档首部

ndd

删除n行

9、字符的替换及撤销(Undo操作)

1)替换和撤销(Undo)命令

替换和Undo命令都是针对普通模式下的操作

命令

说明

r+<待替换字母>

将游标所在字母替换为指定字母

R

连续替换,直到按下Esc

cc

替换整行,即删除游标所在行,并进入插入模式

cw

替换一个单词,即删除一个单词,并进入插入模式

C(大写)

替换游标以后至行末

~

反转游标所在字母大小写

u{n}

撤销一次或n次操作

U(大写)

撤销当前行的所有修改

Ctrl+r

redo,即撤销undo的操作

10、快速缩进

1)使用命令进行快速调整缩进操作

缩进操作均在普通模式下有效

  • 普通模式下输入15G,跳转到15行
  • 普通模式下输入>> 整行将向右缩进(使用,用于格式化代码超爽)
  • 普通模式下输入<< 整行向左回退
  • 普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数

2)shiftwidth命令

shiftwidth命令是指>>命令产生的缩进(可以简写成sw) 普通模式下输入:进入命令行模式

对shiftwidth值进行设置可以控制缩进和回退的字符数。 获取目前的设定值:set shiftwidth? ;设置缩进为10个字符:set shiftwidth=10

11、调整文本位置

命令行模式下输入:ce(center)命令使本行内容居中   :ce

命令行模式下输入:ri(right)命令使本行文本靠右    :ri

命令行模式下输入:le(left)命令使本行内容靠左    :le

12、查找

1)快速查找

普通模式下输入/向下查找,输入?向上查找,n表示继续查找,N反向查找

2)高级查找

  • 普通模式下输入\*寻找游标所在处的单词
  • 普通模式下输入\#同上,但 \* 是向前(上)找,#则是向后(下)找
  • 普通模式下输入g\*同\* ,但部分符合该单词即可
  • 普通模式下输入g\#同\# ,但部分符合该单词即可

13、多文件编辑

1)使用vim编辑多个文件

编辑多个文件有两种形式:一种是在进入vim前使用的参数就是多个文件;另一种就是进入vim后再编辑其他的文件。 同时创建两个新文件并编辑   $ vim 1.txt 2.txt

默认进入1.txt文件的编辑界面

$ vim -r 1.txt

  • 命令行模式下输入:n编辑2.txt文件,可以加!即:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件
  • 命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件

2)进入vim后打开新文件

  • 命令行模式下输入:e 3.txt 打开新文件3.txt
  • 命令行模式下输入:e# 回到前一个文件
  • 命令行模式下输入:ls可以列出以前编辑过的文档
  • 命令行模式下输入:b 2.txt(或者编号)可以直接进入文件2.txt编辑
  • 命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
  • 命令行模式下输入:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件
  • 命令行模式下输入:f 显示正在编辑的文件名
  • 命令行模式下输入:f new.txt,改变正在编辑的文件名字为new.txt

3)恢复文件

如果因为断电等原因造成文档没有保存,可以采用恢复方式,vim -r进入文档后,输入:ewcover 1.txt来恢复

14、可视模式

  • 在普通模式下输入v(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下v会后就会取消选取。
  • 在普通模式下输入Shift+v(小写),进入行选择模式,按下V之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次Shift+v就可以取消选取。
  • 在普通模式下输入 Ctrl+v(小写),这是区域选择模式,可以进行矩形区域选择,再按一次Ctrl+v取消选取。
  • 在普通模式下输入d删除选取区域内容
  • 在普通模式下输入y复制选取区域内容
  • 在普通模式下输入 Ctrl+v(小写v),进入可视模式进行矩形区域选择,选中第一列字符然后x删除整列

15、视窗操作

打开多个窗口进行编辑:在命令行模式下输入:new

下述列举的多种方法也可以在命令模式或普通模式下打开新的视窗:

  • 命令行模式下输入:sp 1.txt 打开新的横向视窗来编辑1.txt
  • 命令行模式下输入:vsp 2.txt 打开新的纵向视窗来编辑1.txt
  • 普通模式下Ctrl-w s 将当前窗口分割成两个水平的窗口
  • 普通模式下Ctrl-w v 将当前窗口分割成两个垂直的窗口
  • 普通模式下Ctrl-w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
  • 普通模式下Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗
  • 普通模式下Ctrl-w j 移至下面视窗
  • 普通模式下Ctrl-w k 移至上面视窗
  • 普通模式下Ctrl-w h 移至左边视窗
  • 普通模式下Ctrl-w l 移至右边视窗
  • 普通模式下Ctrl-w J 将当前视窗移至下面
  • 普通模式下Ctrl-w K 将当前视窗移至上面
  • 普通模式下Ctrl-w H 将当前视窗移至左边
  • 普通模式下Ctrl-w L 将当前视窗移至右边
  • 普通模式下Ctrl-w - 减小视窗的高度
  • 普通模式下Ctrl-w + 增加视窗的高度

16、创建加密文档: $ vim -x file1

17、在vim执行外部命令

在命令行模式中输入!可以执行外部的shell命令

  • :!ls 用于显示当前目录的内容
  • :!rm FILENAME用于删除名为 FILENAME 的文件
  • :w FILENAME可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件
  • 普通模式下按F1打开vim自己预设的帮助文档
  • 命令行模式下输入:h shiftwidth 打开名为shiftwidth的帮助文件
  • 命令行模式下输入:ver 显示版本及参数

18、vim中的查看帮助

  • 普通模式下按F1打开vim自己预设的帮助文档
  • 命令行模式下输入:h shiftwidth 打开名为shiftwidth的帮助文件
  • 命令行模式下输入:ver 显示版本及参数

19、功能设定

1)vim的功能设定

要永久保存配置需要修改vim配置文件。 vim的配置文件~/.vimrc,可以打开文件进行修改.

2.获取目前的设定

  • 命令行模式下输入:set或者:se显示所有修改过的配置
  • 命令行模式下输入:set all 显示所有的设定值
  • 命令行模式下输入:set option? 显示option的设定值
  • 命令行模式下输入:set nooption 取消当期设定值
  • 命令行模式下输入:set autoindent(ai) 设置自动缩进
  • 命令行模式下输入:set autowrite(aw) 设置自动存档,默认未打开
  • 命令行模式下输入:set background=dark或light,设置背景风格
  • 命令行模式下输入:set backup(bk) 设置自动备份,默认未打开
  • 命令行模式下输入: set cindent(cin) 设置C语言风格缩进

3.set功能的说明

  • 命令行模式下输入:set autoindent(ai) 设置自动缩进
  • 命令行模式下输入:set autowrite(aw) 设置自动存档,默认未打开
  • 命令行模式下输入:set background=dark或light,设置背景风格
  • 命令行模式下输入:set backup(bk) 设置自动备份,默认未打开
  • 命令行模式下输入: set cindent(cin) 设置C语言风格缩进

linux下c编程基础部分

1、C语言的特点

1)中级语言 2)结构化 3)功能齐全 4)可移植性强

2、linux下C语言的编程环境

1)vim编辑器:编写代码

2)gcc编译链接器:编译程序

  • 预处理:gcc –E hello.c –o hello.i    ;gcc –E调用cpp     产生预处理过的C原始程序
  • 编 译:gcc –S hello.i –o hello.s      ;gcc –S调用ccl      产生汇编语言原始程序
  • 汇 编:gcc –c hello.s –o hello.o     ;gcc -c 调用as       产生目标文件
  • 链 接:gcc hello.o –o hello            ;gcc -o 调用ld        产生可执行文件
  • 运行: ./hello 

注意:gcc的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件],其中,目标文件可默认,gcc默认生成可执行的文件,名为编译文件.out.

(1)gcc编译常用选项:-E(只预编译)、-S(只编译不汇编)、-o(将file文件指定为输出文件)、-c(只编译不链接)、

          -I dir(在头文件的搜索路径列表中添加dir目录)、-g(在可执行程序中包含标准调试信息)

库选项:-static(进行静态编译,即链接静态库、禁止使用动态库)、-shared(生成动态库文件、进行动态编译,在没有动态库时才会链接同名静态库)

    -L dir (在库文件的搜索路径列表中添加dir目录)、-lname、-fPIC(生成使用相对地址的位置无关的目标代码,然后使用gcc的-static选项从该PIC目标文件生成动态库文件)

(2)静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文件);链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”

(3)静态链接库的生成: gcc -c 文件名.c     ar rcsv libxxx.a xxx.o

静态库的使用: gcc -o 文件名 文件名.c -L. -lxxx  //链接到静态库

注意:-L :在库文件的搜索路径列表中添加dir目录

     -l : 在头文件的搜索路径列表中添加dir目录

(3)共享库的生成 gcc -fPIC -c xxx.c

                    gcc -shared -o libxxx.so xxx.o

共享库的使用:gcc -o main main.c -L. -lxxx

(4)注册共享库的方法

a、修改/etc/ld.so.conf文件

b、修改LD_LIBRARY_PATH环境变量

c、将库文件直接复制到/lib或者/usr/lib目录下: cp (lib+name).so /lib

(5)gcc警告和出错选项列表

-w(关闭所有告警)、-Wall(允许发出gcc提供的所有有用的报警信息)、-werror(把所有的告警信息转化为错误信息,并在告警发生时终止编译过程)

3)gdb调试器:调试代码

(1)使用流程

  • 查看文件:l
  • 设置断点:在b后加入相对应的行号。例b 6
  • 查看断点情况:设置完断点后键入info b,在gdb中可以设置多个断点。bt 查询调用函数的情况。
  • 运行代码:默认从首行开始运行代码,键入r;r+行号:从该行号开始运行
  • 查看变量值:p 变量。例:p n
  • 单步运行:n或s,s会进入函数,n不会进入函数
  • 恢复程序运行:c”

注意:程序的运行状态有“运行”、“暂停”、“停止“三种。

(2)基本命令:help

主要命令:

工作环境相关命令

设置断点与恢复命令

源码查看相关命令

查看运行数据相关命令

修改运行参数相关命令

(3)断点的设置

函数:b 文件名.c:函数名

行:b 行数

条件:b 行数 if 表达式(b 8 if == 10)

临时:tb [文件名:]行号或函数名 <条件表达式>

4)make项目管理器:识别文件代码是否更新,减少编译工作量

原理:make工程管理器又名“自动编译管理器”,它可以根据文件时间戳自动发现更新过的文件而减少编译工作量,能够读入makefile文件的内容来执行编译工作。编译分为编译、汇编、链接阶段,其中编译阶段仅检查语法错误以及函数与变量是否被正确声明;链接阶段主要完成函数链接和全局变量的链接。

(1)makefile文件的编写规则

格式为:

目标体:依赖文件

[tab键]各目标体运行命令

目标体:由make创建,通常是目标文件或可执行文件

依赖文件:创建目标体所依赖的文件

运行命令:创建每个目标体时需要的运行命令,必须以tab键开头。

使用make的格式:make 目标体

(2)makefile变量的定义

递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容。

格式定义:VAR = var

展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用。

格式定义:VAR := var

make中变量的使用格式: $(变量名)

变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感。

变量分类:用户自定义变量、预定义变量、自动变量及环境变量。

(3)makefile规则

隐含规则

模式规则

2. 教材代码编译运行

gdb的练习

3. 课后作业

(1)练习代码

gcc编译过程图(静态库的创建)

gcc编译过程图(动态库的创建)

gcc编译过程图(运行结果)

make实现上述代码的静态库使用自动化

make实现上述代码的动态库使用自动化

makefile文件为:

(2)gdb调试过程练习例子

 

(3)make实现使用自动化的例子

 

 

 

参考资料:(参考论文、图书、网站、同学的内容一定要进行标注,否则以作弊论处,本次作业判0,三次以上的以课程考试作作弊论,并在立此存照(http://www.cnblogs.com/rocedu/p/4795939.html)中曝光)


七、遇到的问题及解决

(提示:此处由学生填写,是重要的得分点,要写出遇到的问题和解决方案以及对出现问题的思考)

vim学习部分

 1、行内跳转:普通模式下使用下列命令在行内按照单词为单位进行跳转,以下操作不能实现功能:

f<字母> 向后搜索<字母>并跳转到第一个匹配的位置(非常实用)
F<字母> 向前搜索<字母>并跳转到第一个匹配的位置
t<字母> 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用)
T<字母> 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)

 

 2、问题如图,无法实现该操作的练习:

 

 

3、问题如图,无法实现该操作的练习:

 

 4、编译作业中要求编译的代码,出现错误,找不到头文件,如图所示:

 错误原因:因为对图片的理解错误,直接将图片内容写入了同一个文件中。

 5、gdb设置断点,没有效果,问题如图。

6、不会画依赖图

 

八、其他

(提示:此处由学生填写,灵感,领悟等)

posted on 2015-09-25 23:10  宋宋^_^  阅读(211)  评论(1编辑  收藏  举报