zoukankan      html  css  js  c++  java
  • 信息安全程序设计基础第二周学习总结

    :tabe fn     在一个新的标签页中编辑文件fn
    gt     切换到下一个标签页
    gT     切换到上一个标签页
    :tabr     切换到第一个标签页
    :tabl     切换到最后一个标签页
    :tabm [N]     把当前tab移动到第N个tab之后
    对,正如你所想象的那样,跟eclipse, ue等的标签页是一个意思!
    窗口命令
    ctrl+w s     水平分割窗口
    ctrl+w w     切换窗口
    ctrl+w q     退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)
    ctrl+w v     垂直分割窗口


    :w     将缓冲区写入文件,即保存修改
    :wq     保存修改并退出
    :x     保存修改并退出
    :q     退出,如果对缓冲区进行过修改,则会提示
    :q!     强制退出,放弃修改
    查找替换
    /pattern     向后搜索字符串pattern
    ?pattern     向前搜索字符串pattern
    n     下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)
    N     上一个匹配(同上)
    :%s/old/new/g     搜索整个文件,将所有的old替换为new
    :%s/old/new/gc     搜索整个文件,将所有的old替换为new,每次都要你确认是否替换
    复制粘贴
    dd     删除光标所在行
    dw     删除一个字(word)
    x     删除当前字符
    X     删除前一个字符
    D     删除到行末
    yy     复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6行
    yw     复制一个字
    y$     复制到行末
    p     粘贴粘贴板的内容到当前行的下面
    P     粘贴粘贴板的内容到当前行的上面
    ]p     有缩进的粘贴,vim会自动调节代码的缩进
    "a     将内容放入/存入a寄存器,可以支持多粘贴板

    h,j,k,l     上,下,左,右
    ctrl-f     上翻一页
    ctrl-b     下翻一页
    %     跳到与当前括号匹配的括号处,如当前在{,则跳转到与之匹配的}处
    w     跳到下一个字首,按标点或单词分割
    W     跳到下一个字首,长跳,如end-of-line被认为是一个字
    e     跳到下一个字尾
    E     跳到下一个字尾,长跳
    b     跳到上一个字
    B     跳到上一个字,长跳
    0     跳至行首,不管有无缩进,就是跳到第0个字符
    ^     跳至行首的第一个字符
    $     跳至行尾
    gg     跳至文件的第一行
    gd     跳至当前光标所在的变量的声明处
    [N]G     跳到第N行,如0G,就等价于gg,100G就是第100行
    fx     在当前行中找x字符,找到了就跳转至
    ;     重复上一个f命令,而不用重复的输入fx
    tx     与fx类似,但是只是跳转到x的前一个字符处
    Fx     跟fx的方向相反
    ),(     跳转到上/下一个语句
    *     查找光标所在处的单词,向下查找
    #     查找光标所在处的单词,向上查找
    `.     跳转至上次编辑位置
    在屏幕上移动

    H     移动光标到当前屏幕上最上边的一行
    M     移动光标到当前屏幕上中间的一行
    L     移动光标到当前屏幕上最下边的一行
    书签
    ma     把当前位置存成标签a
    `a     跳转到标签a处
    编辑
    r     替换一个字符
    J     将下一行和当前行连接为一行
    cc     删除当前行并进入编辑模式
    cw     删除当前字,并进入编辑模式
    c$     擦除从当前位置至行末的内容,并进入编辑模式
    s     删除当前字符并进入编辑模式
    S     删除光标所在行并进入编辑模式
    xp     交换当前字符和下一个字符
    u     撤销
    ctrl+r     重做
    .     重复上一个编辑命令
    ~     切换大小写,当前字符
    g~iw     切换当前字的大小写
    gUiw     将当前字变成大写
    guiw     将当前字变成小写
    >>     将当前行右移一个单位
    <<     将当前行左移一个单位(一个tab符)
    ==     自动缩进当前行

    插入模式
    i     从当前光标处进入插入模式
    I     进入插入模式,并置光标于行首
    a     追加模式,置光标于当前光标之后
    A     追加模式,置光标于行末
    o     在当前行之下新加一行,并进入插入模式
    O     在当前行之上新加一行,并进入插入模式
    Esc     退出插入模式
    可视模式
    标记文本
    v     进入可视模式,单字符模式
    V     进入可视模式,行模式
    ctrl+v     进入可视模式,列模式,类似于UE的列模式
    o     跳转光标到选中块的另一个端点
    U     将选中块中的内容转成大写
    O     跳转光标到块的另一个端点
    aw     选中一个字
    ab     选中括号中的所有内容,包括括号本身
    aB     选中{}括号中的所有内容
    ib     选中括号中的内容,不含括号
    iB     选中{}中的内容,不含{}

    对标记进行动作
    >     块右移
    <     块左移
    y     复制块
    d     删除块
    ~     切换块中内容的大小

    2. gcc

    GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。

    GCC编译代码的过程如下:

    我们可以把编译过程分成四步,以编译hello.c生成可执行文件hello为例,如下图:

    • 预处理: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”,这样记忆起来就容易多了。

    学习GCC的另外一个重点是:参考教材《深入理解计算机系统》 7.6,7.10节,学习静态库,动态库的制作。

    info b 查看所设断点

    break 行号或函数名 <条件表达式> 设置断点

    tbreak 行号或函数名 <条件表达式> 设置临时断点,到达后被自动删除

    delete [断点号] 删除指定断点,其断点号为”info b”中的第一栏。若缺省断点号则删除所有断点

    disable [断点号]] 停止指定断点,使用”info b”仍能查看此断点。同delete一样,省断点号则停止所有断点

    enable [断点号] 激活指定断点,即激活被disable停止的断点

    condition [断点号] <条件表达式> 修改对应断点的条件

    ignore [断点号]<num> 在程序执行中,忽略对应断点num次

    step 单步恢复程序运行,且进入函数调用

    next 单步恢复程序运行,但不进入函数调用

    finish 运行程序,直到当前函数完成返回

    c 继续执行函数,直到函数结束或遇到新的断点

    由于设置断点在Gdb的调试中非常重要,所以在此再着重讲解一下Gdb中设置断点的方法。

    Gdb中设置断点有多种方式:其一是按行设置断点,设置方法在3.5.1节已经指出,在此就不重复了。另外还可以设置函数断点和条件断点,在此结合上一小节的代码,具体介绍后两种设置断点的方法。

    ① 函数断点

    (gdb) b 函数名

    ② 条件断点

    格式为:b 行数或函数名 if 表达式

    (gdb) b 8 if i==10

    3. gdb

    2.1预处理

     

    可以输出test.i文件中存放着test.c经预处理之后的代码。打开test.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.

    gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到test.c中了。

    2.2编译为汇编代码(Compilation)

    预处理之后,可直接对生成的test.i文件编译,生成汇编代码:

    gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

    2.3汇编(Assembly)

    对于上一小节中生成的汇编代码文件test.s,gas汇编器负责将其编译为目标文件,如下:

    2.4连接(Linking)

    gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

    对于上一小节中生成的test.o,将其与C标准输入输出库进行连接,最终生成程序test

     

    在命令行窗口中,执行./test, 让它说HelloWorld吧!

    建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。 注意使用GCC编译时要加“-g”参数。 参考gdb参考卡GDB最基本的命令有:

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

    4.其他

    display 跟踪变量值的改变

    until 跳出循环

    finish 跳出函数

    help 帮助

  • 相关阅读:
    mac安装完anaconda后,环境变量设置
    axios如何发送Basic Auth
    Django自带认证系统邮件模板自定义
    Ajax与Flask传值的跨域问题
    一道XXE漏洞和SSRF结合的题目
    如何分多次Pull requests
    如何使用C#写个多简单文档编辑器
    如何用Tkinter写个计算器
    LCTF2017学到的姿势
    Python 学习之路
  • 原文地址:https://www.cnblogs.com/baka/p/4844616.html
Copyright © 2011-2022 走看看