zoukankan      html  css  js  c++  java
  • 20135220谈愈敏--信息安全系统设计基础第二周学习总结

     《深入理解计算机系统》实验一

    在我的理解中:

    元知识:思考问题的能力

    硬知识:可见的知识点

    软知识:实践中的经验

    后面的常用命令是老师上课中讲到的。

    一边看提供的材料一边在实验楼里实践,我的实验顺序如下:

    vim编辑器实验1234

    普通模式(Normal mode):在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。

    Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。

    在普通模式中,有很多方法可以进入插入模式。比较普通的方式是a(append/追加)键或者i(insert/插入)键

    插入模式(Insert mode):在这个模式中,大多数按键都会向文本缓冲中插入文本。在插入模式中,可以按ESC键回到普通模式。

    命令行模式(Command line mode):在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。

    三种常用模式的切换

    vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[(这在vim课程环境中不管用)即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模式中输入wq回车后保存并退出vim。

    使用vim命令进入vim界面

    vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。

    直接使用vim也可以打开vim编辑器,但是不会打开任何文件。进入命令行模式后输入:e 文件路径 同样可以打开相应文件。

    游标移动

    普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标。

    按键说明
    h
    l 右(小写L)
    j
    k
    w 移动到下一个单词
    b 移动到上一个单词

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

    命令说明
    i 在当前光标处进行编辑
    I 在行首插入
    A 在行末插入
    a 在光标后插入编辑
    o 在当前行后插入一个新行
    O 在当前行前插入一个新行
    cw 替换从光标所在位置后到一个单词结尾的字符

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

    退出vim

    1.命令行模式下退出vim

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

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

    命令说明
    :q! 强制退出,不保存
    :q 退出
    :wq! 强制保存并退出
    :w <文件路径> 另存为
    :saveas 文件路径 另存为
    :x 保存并退出
    :wq 保存并退出

    2.普通模式下退出vim

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

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

    命令说明
    x 删除游标所在的字符
    X 删除游标所在前一个字符
    Delete x
    dd 删除整行
    dw 删除一个单词(不适用中文)
    d$D 删除至行尾
    d^ 删除至行首
    dG 删除到文档结尾处
    d1G 删至文档首部

    除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:

    2dd表示一次删除2行

    重复执行上次命令

    在普通模式下.(小数点)表示重复上一次的命令操作

    进入普通模式输入N<command>,N表示重复后面的次数

    输入10x,删除10个连续字符    输入3dd,将会删除3行文本

    在普通模式下,你还可以使用dw或者daw(delete a word)删除一个单词,所以你可以很容易的联想到dnw(n替换为相应数字)表示删除n个单词

    行间跳转  注意是在普通模式下

    命令说明
    nG(n Shift+g) 游标移动到第 n 行(如果默认没有显示行号,请先进入命令模式,输入:set nu以显示行号)
    gg 游标移动到到第一行
    G(Shift+g)

    到最后一行

    小技巧:你在完成依次跳转后,可以使用Ctrl+o快速回到上一次(跳转前)光标所在位置

    普通模式下使用下列命令在行内按照单词为单位进行跳转

    命令说明
    w 到下一个单词的开头
    e 到下一个单词的结尾
    b 到前一个单词的开头
    ge 到前一个单词的结尾
    0^ 到行头
    $ 到行尾
    f<字母> 向后搜索<字母>并跳转到第一个匹配的位置(非常实用)
    F<字母> 向前搜索<字母>并跳转到第一个匹配的位置
    t<字母> 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用)
    T<字母> 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)

    可使用~将游标所在字母变成大写或小写

    普通模式中使用y复制

    普通模式中,yy复制游标所在的整行(3yy表示复制3行)

    普通模式中,y^ 复制至行首,或y0。不含光标所在处字符。

    普通模式中,y$ 复制至行尾。含光所在处字符。

    普通模式中,yw 复制一个单词。

    普通模式中,y2w 复制两个单词。

    普通模式中,yG 复制至文本末。

    普通模式中,y1G 复制至文本开头。

    普通模式中使用p粘贴

    普通模式中,p(小写)代表粘贴至光标后(下)

    普通模式中,P(大写)代表粘贴至光标前(上)

    其实前面讲得dd删除命令就是剪切,你每次dd删除文档内容后,便可以使用p来粘贴,也这一点可以让我们实现一个功能——交换上下行:

    ddp,即实现了快速交换光标所在行与它下面的行

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

    命令说明
    r+<待替换字母> 将游标所在字母替换为指定字母
    R 连续替换,直到按下Esc
    cc 替换整行,即删除游标所在行,并进入插入模式
    cw 替换一个单词,即删除一个单词,并进入插入模式
    C(大写) 替换游标以后至行末
    ~ 反转游标所在字母大小写
    u{n} 撤销一次或n次操作
    U(大写) 撤销当前行的所有修改
    Ctrl+r redo,即撤销undo的操作

    快速缩进

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

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

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

    2.shiftwidth命令

    shiftwidth命令是指上一节>>命令产生的缩进(可以简写成sw) 普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数 获取目前的设定值

    :set shiftwidth?
    

    设置缩进为10个字符  :set shiftwidth=10

    输入ESC回到普通模式,再次尝试>>看缩进量是否变化

    问题:这里不用ESC退出,输完命令后ENTER直接就回到普通模式了

    3.调整文本位置

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

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

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

    快速查找

    普通模式下输入/然后键入需要查找的字符串 按回车后就会进行查找。 /功能相同,只不过是向上而/是向下查找。 进入查找之后,输入nN可以继续查找 (相当于查找下一处和上一处)n表示继续查找,N反向查找

    高级查找

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

    以上查找n,N 的继续查找命令依然可以用

     

    使用vim编辑多个文件

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

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

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

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

    进入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

    恢复文件

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

    可视模式命令简介(我理解为选择出对象好进行一起操作)

    在普通模式下输入v(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下v会后就会取消选取。

    在普通模式下输入Shift+v(小写),进入行选择模式,按下V之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次Shift+v就可以取消选取。

    在普通模式下输入 Ctrl+v(小写),这是区域选择模式,可以进行矩形区域选择,再按一次Ctrl+v取消选取。

    在普通模式下输入d删除选取区域内容

    在普通模式下输入y复制选取区域内容

    视窗操作简介

    vim可以在一个界面里打开多个窗口进行编辑,这些编辑窗口称为vim的视窗。 打开方法有很多种,例如可以使用在命令行模式下输入:new 打开一个新的vim视窗,并进入视窗编辑一个新文件(普通模式下输入Ctrl+w也可以,但是Ctrl+w在chrome下会与chrome关闭标签页的快捷键冲突,所以使用该快捷键你可以在IE或其它浏览器进行练习),除了: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 + 增加视窗的高度

    如果使用非chrome浏览器可以使用Ctrl+w进行视窗间的跳转

    创建加密文档

    $ vim -x file1
    

    输入您的密码 确认密码 这样在下一次打开时,vim就会要求你输入密码

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

    • :!ls 用于显示当前目录的内容
    • :!rm FILENAME用于删除名为 FILENAME 的文件
    • :w FILENAME可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件

    vim中的查看帮助

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

    vim的功能设定

    可以在编辑文件的时候进行功能设定,如命令行模式下输入:set nu(显示行数),设定值退出vim后不会保存。要永久保存配置需要修改vim配置文件。 vim的配置文件~/.vimrc,可以打开文件进行修改,不过务必小心不要影响vim正常使用

    获取目前的设定

    • 命令行模式下输入:set或者:se显示所有修改过的配置
    • 命令行模式下输入:set all 显示所有的设定值
    • 命令行模式下输入:set option? 显示option的设定值
    • 命令行模式下输入:set nooption 取消当期设定值

    set功能的说明

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

    实验:GCC的使用

    gcc 支持编译的一些源文件后缀名

    后缀源文件
    .c C语言源文件
    .C .cc .cxx C++源文件
    .m Object-C源文件
    .i 经过预处理后的C源文件
    .ii 经过预处理后的C++源文件
    .s .S 汇编语言源文件
    .h 预处理文件(头文件)
    .o 目标文件
    .a 存档文件

     gcc 编译程序的流程

    图片描述信息

    Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可 sudo chmod u+x excutefile

    可以让gcc在编译的任何阶段结束,以便检查或使用该阶段的输出(这个很重要)

    示例

    打开的gvim环境中输入i进入编辑模式,输入以下代码

    // filename: hello.c
    #include <stdio.h>
    int main(int argc, char **argv)
    {
        printf("Hello, Shi-Yan-Lou!");
    }
    
    /**
      *在XfceTerminal打开后的界面中输入:$gcc hello.c -o hello
      *如果没有error,说明编译成功,将会在当前目录生成一个可执行文件 hello
      *继续输入:./hello 就会运行该程序,在bash上打印出 Hello, Shi-Yan-Lou!
     **/

    期中:gcc hello.c -o hello --- 第二个hello为文件名,名字任意取定(但是不能违反bash的规则) 

    从程序员的角度来看,一个简单的-o选项可以省略很多中间步骤一次性输出可执行文件; 但从编译器的角度来看,这条命令的背后是一系列的繁杂的工作。

    gcc流程:

    1、gcc会调用预处理程序cpp,由它负责展开在源程序中定义的宏(上例:#include <stdio.h>),向其中插入#include语句所包含的内容(展开stdio.h包含的代码)

    在Xfce终端中输入:$ gcc -E hello.c -o hello.i

    hello.i这是一个经过预处理器处理之后的C源文件

    gcc的-E参数可以让gcc在预处理结束后停止编译过程。

    2、将hello.i编译为目标代码,gcc默认将.i文件看成是预处理后的C语言源代码,因此它会直接跳过预处理,开始编译过程。

    $ gcc -c hello.i -o hello.o
    

    同样,用vim打开.o文件看,应该是一片乱码(它已经是二进制文件了)

    Tips:

    1. 请记住,gcc预处理源文件的时候(第一步),不会进行语法错误的检查
    2. 语法检查会在第二步进行,比如花括号不匹配、行末尾没有分号、关键字错误......

    3、gcc连接器将目标文件链接为一个可执行文件,一个大致的编译流程结束

    gcc hello.o -o hello


    示例及作业
    作业只需要改一下函数hello_print.c
    实验示例:

    作业:


     实验:GDB的使用

    gdb(GNU debugger)调试程序的方法,该程序是一个调试器,是用来帮助程序员寻找程序中的错误的软件。

    启动程序,可以按照用户自定义的要求随心所欲的运行程序。

    可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。

    当程序停住时,可以检查此时程序中所发生的事。

    动态地改变程序的执行环境。

    从上面来看,gdb和一般的调试工具区别不大,基本上也是完成这些功能,不过在细节上,会发现gdb这个调试工具的强大。命令行的调试工具却有着图形化工具所不能完成的功能。

    ­­­­­­­­­­­­­­­­­­­­­­­­­­­gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可

    如:$ gcc -g hello.c -o hello

    $ g++ -g hello.cpp -o hello

    如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。当用-g把调试信息加入,并成功编译目标代码以后,看看如何用gdb来调试。 启动gdb的方法有以下几种:

    1. gdb <program> program也就是执行文件,一般在当前目录下。
    2. gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
    3. gdb <program> <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索得到。 gdb启动时,可以加上一些gdb的启动开关,详细的开关可以用gdb -help查看。下面只列举一些比较常用的参数: -symbols <file> -s <file> 从指定文件中读取符号表。 -se file 从指定文件中读取符号表信息,并把它用在可执行文件中。 -core <file> -c <file> 调试时core dump的core文件。 -directory <directory> -d <directory> 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

    Makefile 使用

    Makefile带来的好处就是——“自动化编译”,一但写好,只需要一个 make 命令,整个工程便可以完全编译,极大的提高了软件的开发效率

    一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作

    make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。而makefile文件需要按某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。

    下面是一个简单的makefile的例子。

    使用下面的命令进行编译:

    $ gcc -c code.c -o code.o
    $ gcc -c prog.c -o prog.o
    $ gcc prog.o code.o -o test

    首先$ vim Makefile

    test: prog.o code.o
            gcc prog.o code.o -o test
    prog.o: prog.c code.h
            gcc -c prog.c -o prog.o
    code.o: code.c code.h
            gcc -c code.c -o code.o
    clean:
            rm -f *.o test

    编译命令反向写makefile

    有了这个Makefile,不论什么时候修改源文件,只要执行一下make命令,所有必要的重新编译将自动执行。make程序利用Makefile中的数据,生成并遍历以test为根节点的树;现在以上面的实例,来学习一下Makefile的一般写法:

    test(目标文件): prog.o code.o(依赖文件列表)
    tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
    .......
    一个Makefile文件主要含有一系列的规则,每条规则包含一下内容:一个目标,即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如‘clean’;一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,并以tab开头(初学者务必注意:是tab,而不是空格) 执行以上Makefile后就会自动化编译

    使用带宏的 Makefile

    Makefile还可以定义和使用宏(也称做变量),从而使其更加自动化,更加灵活,在Makefile中定义宏的格式为:

    macroname = macrotext
    

    使用宏的格式为:

    $(macroname)
    也可以理解为变量

    实验二 Linux下C语言编程基础

    VIM中:

    • 大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
    • 几个设置
    
    

    :set nu 显示行号

    
    

    :set ai 自动缩行

    
    

    :set ts=4 设置一个 TAB 键等于几个空格

    
    
    • 移动光标
    
    

    [[ 转到上一个位于第一列的"{"

    
    

    ]] 转到下一个位于第一列的"{"

    
    

    { 转到上一个空行

    
    

    } 转到下一个空行

    
    

    gd 转到当前光标所指的局部变量的定义

    
    

    GCC编译代码的过程如下:

    
    

    gcc1

    • 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
    • 编 译: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
    
    

    编译过程比较难记,我们简化一下,前三步,GCC的参数连起来是“ESc”,相应输入的文件的后缀是“iso”,这样记忆起来就容易多了。

    GDB:

     注意使用GCC编译时要加“-g”参数。 

    • gdb programm(启动GDB)
    • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
    • run 开始运行程序
    • bt 打印函数调用堆栈
    • p 查看变量值
    • c 从当前断点继续运行到下一个断点
    • n 单步运行
    • s 单步运行
    • quit 退出GDB

    问题:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?

    我认为应该先用n命令,直接是函数的结果,如果正确就向下运行,如果不正确就说明函数内部有问题,再用s命令。

    • display 跟踪变量值的改变
    • until 跳出循环
    • finish 跳出函数
    • help 帮助
    
    

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

    先在vim中写好这六个代码。

    3.练习gcc编译运行代码;

    4.练习gdb调试代码;

    5.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;

    6.编写makefile,让代码编译,上述静态库和共享库的使用自动化。

  • 相关阅读:
    AX 2012 Security Framework
    The new concept 'Model' in AX 2012
    How to debug the SSRS report in AX 2012
    Using The 'Report Data Provider' As The Data Source For AX 2012 SSRS Report
    Deploy SSRS Report In AX 2012
    AX 2012 SSRS Report Data Source Type
    《Taurus Database: How to be Fast, Available, and Frugal in the Cloud》阅读笔记
    图分析理论 大纲小结
    一文快速了解Posix IO 缓冲
    #转载备忘# Linux程序调试工具
  • 原文地址:https://www.cnblogs.com/tymjava/p/4833847.html
Copyright © 2011-2022 走看看