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


    第三周(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、不会画依赖图

    八、其他

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

  • 相关阅读:
    跟王千问学数学之什么是比
    王千问之学习的金字塔
    跟王千问学数学之平方差公式
    跟王千问学数学之三角形
    跟王千问学数学之小数加法、最小公倍数
    跟王千问学数学之小数
    一年级孩子的特点以及如何辅导他们学习
    python中的property属性
    python中的浅拷贝和深拷贝
    http协议、web服务器、并发服务器(下)
  • 原文地址:https://www.cnblogs.com/java-stx/p/4833544.html
Copyright © 2020-2023  润新知