zoukankan      html  css  js  c++  java
  • 20145334赵文豪 《信息安全系统设计基础》第2周学习总结

    vim知识点:
    从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,仅仅通过键盘来在这些模式之中切换。这就使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作。对文字录入员或者程序员可以大大增强速度和效率。

    Vim具有6种基本模式和5种派生模式,我们这里只简单介绍下6种基本模式:

    普通模式(Normal mode)
    在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

    Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

    在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
    插入模式(Insert mode)
    在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

    在插入模式中,可以按ESC键回到普通模式。
    可视模式(Visual mode)
    这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。
    选择模式(Select mode)
    这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
    命令行模式(Command line mode)
    在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
    Ex模式(Ex mode)
    这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

    这其中我们常用到就是普通模式、插入模式和命令行模式,本课程也只涉及这三个常用模式的内容

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

    复制及粘贴文本

    普通模式中使用y复制

    普通模式中,yy复制游标所在的整行(3yy表示复制3行)
    普通模式中,y^ 复制至行首,或y0。不含光标所在处字符。
    普通模式中,y$ 复制至行尾。含光所在处字符。
    普通模式中,yw 复制一个单词。
    普通模式中,y2w 复制两个单词。
    普通模式中,yG 复制至文本末。
    普通模式中,y1G 复制至文本开头。
    普通模式中使用p粘贴

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

    剪切及粘贴

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

    ddp

    替换和撤销(Undo)命令

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

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

    快速查找

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

    gdb调试技术

    gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。如:

    gcc -g hello.c -o hello
    g++ -g hello.cpp -o hello
    使用GCC编译时要加“-g”参数,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。
    GDB最基本的命令:

    gdb programm(启动GDB)
    b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
    run 开始运行程序
    bt 打印函数调用堆栈
    p 查看变量值
    c 从当前断点继续运行到下一个断点
    n 单步运行
    s 单步运行
    quit 退出GDB
    display 跟踪变量值的改变
    until 跳出循环
    finish 跳出函数
    help 帮助
    GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数。
    在 gdb 命令行界面可以执行外部的 Shell 命令:输入(gdb) !shell 命令
    list:显示源文件中的代码

    list 行号 显示某一行附近的代码
    list 文件名 : 行号 显示某一个文件某一行附近的代码
    list 函数名 显示某个函数附近的代码
    break:用来设置断点

    break 行号 断点设置在该行开始处,注意:该行代码未被执行
    break 文件名 : 行号 适用于有多个源文件的情况。
    break 函数名 断点设置在该函数的开始处,断点所在行未被执行
    break 文件名 : 函数名 适用于有多个源文件的情况

    gcc编译文件的流程

    使用gcc编译

    使用gcc进行模块化编译

    gcc使用过程:
    预处理: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

    gdb基本命令:
    gdb programm(启动GDB)
    [b]: 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
    [run]: 开始运行程序
    [bt]: 打印函数调用堆栈
    [p]: 查看变量值
    [c]: 从当前断点继续运行到下一个断点
    [n]: 单步运行
    [s]: 单步运行
    [quit]: 退出GDB
    ·gdb调试命令:
    [display]: 跟踪变量值的改变
    [until]: 跳出循环
    [finish]: 跳出函数
    [help]: 帮助
    ·od -tc -tx1 hello.c:查看源文件
    ·cpu执行指令的操作:加载,储存,操作,跳转
    ·储存系统的核心思想:缓存
    ·操作系统:文件、虚存、进程、虚拟机
    ·链接器的两个任务:符号解析(目标文件定义和引用符号)
    重定位(编译器和汇编器生成从地址0开始的代码和数据节)
    ·目标文件的三种形式:可重定位目标文件、可执行目标文件、共享目标文件
    ·目标文件格式:第一个Linux系统(包括现在的可执行目标文件):a.out
    System V unix早期版本:COFF
    Windows NT:PE(COFF的一个变种)
    现代Unix系统:ELF
    ·处理多重定义符号的规则:1.不允许有多个强符号
    2.如果有一个强符号和多个弱符号,选择弱符号
    3.有多个弱符号,任意选择一个
    ·处理目标文件的工具:AR、STRINGS、STRIP、NM、SIZE、READELF、OBJDUMP、LDD

    gdb调试器,可方便的设置断点、单步跟踪。
    gdb的使用流程
    查看文件:键入l(list)查看所载入的文件
    设置断点
    按行设置断点:b+对应行号即可,可设置多个断点,运行到设置断点的一行程序会自动停止
    函数断点:按函数设置断点只需把函数名列在命令“b”之后
    条件断点:b 行数或函数名 if 表达式
    查看断点情况:info b,在断点键入bt可查到调用函数(堆栈)的情况。
    运行代码:r+行号可从指定行开始运行代码,默认从头执行
    查看变量值:p+变量值即可
    单步运行
    恢复程序运行

    Make和Makefile
    make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。

    而makefile文件需要按某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。

    最终实现——自动化编译

    如何进入Makefile?
    $ vim Makefile

    1.Makefile 基本规则

    Makefile的一般写法:

    一个Makefile文件主要含有一系列的规则,每条规则包含以下内容:

    需要由make工具创建的目标体,通常是可执行文件和目标文件,也可以是要执行的动作,如‘clean’;

    要创建的目标体所依赖的文件,通常是编译目标文件所需要的其他文件。

    创建每个目标体时需要运行的命令,这一行必须以制表符TAB开头

    格式为:

    test(目标文件): prog.o code.o(依赖文件列表)
    tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
    .......
    即:
    target: dependency_files
    command
    2.使用带宏的 Makefile

    Makefile中的宏,也称作变量。

    变量是在makefile中定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值。

    在Makefile中定义宏的格式为:

    macroname = macrotext
    使用宏的格式为:

    $(macroname)

  • 相关阅读:
    [ZT].Net中動態建立和調用WebServices的方法
    英文符号读法整理
    [ZT]SQL Server 的事务日志意外增大或充满的处理方法
    [ZT]Asp.net發布至英文服务器后出现的日期格式问题
    [ZT]如何取得客户端的Windows登录用户名?
    囧!一个盗版用户和微软客服的通话记录
    [轉帖]x.509证书在WCF中的应用(CS篇)
    [原創]關於VS“無法辨認的逸出序列”的錯誤分析和解決方法
    【原創】文件系統目錄文件快速複製轉移工具
    SQL2000/SQL2005導入導出存儲過程圖解
  • 原文地址:https://www.cnblogs.com/bestizwh/p/5907052.html
Copyright © 2011-2022 走看看