• 20145312 《信息安全系统设计基础》第2周学习总结


    20145312 《信息安全系统设计基础》第2周学习总结

    教材学习内容总结

    Vim基本操作

    移动光标 :

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

    进入插入模式 :

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

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

    退出vim:

    命令行模式下退出vim:从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
    普通模式下退出vim:普通模式下输入Shift+zz即可保存退出vim

    删除文本:

    GCC

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

    1.预处理阶段:一般格式为:gcc [选项] 要编译的文件 [选项] 目标文件 gcc -E hello.c -o hello.i
    2.编译阶段:gcc将代码翻译成汇编语言,使用选项-S只进行编译而不进行汇编,结果生成汇编代码。gcc -S hello.i -o hello.s
    3.汇编阶段:将.s文件转成目标文件,使用选项-c可以看到汇编代码转换为二进制目标代码。gcc -c hello.s -o hello.o
    4.链接阶段:默认搜索链接到libc.so.6函数库当中,调用库文件中已经实现的函数。
    

    GDB

    GDB最基本的命令有:

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

    GDB的使用

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

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

    启动GDB的方法有以下几种:

    gdb <program> program也就是执行文件,一般在当前目录下。
    gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
    gdb <program> <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索得到。
    

    Makefile使用

    Makefile的一般写法

    test(目标文件): prog.o code.o(依赖文件列表) 
    tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
    

    使用带宏的 Makefile

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

    生成静态库math.h,共享库math.so

    生成静态库:

    1. 生成目标文件gcc -c add.c sub.c mul.c div.c
    2. 生成静态库:ar rcs math.a add.o sub.o mul.o div.o

    生成共享库

    1. 生成目标文件:gcc -fpic -c add.c sub.c mul.c div.c
    2. 生成共享库:gcc -shared -o math.so add.o sub.o mul.o div.o

    学习中的问题和解决过程

    问题:

    如何区分GDB的n(next)命令和s(step)命令,实际使用中应该优先选用哪个?

    解答:

    GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数。而next导致程序执行的暂停出现在下次调用函数时。DDD有对应的Next和Step菜单项。简单来说next:执行一行源代码但不进入函数内部。step :执行一行源代码而且进入函数内部。我认为应该优选step,通过GDB的next命令一次是移动一行代码,而通过step命令单步调试一段时间,更能够仔细检查靠近断点处的程序状态和行为。

    本周代码托管截图

    学习进度条

    参考资料

  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/yx20145312/p/5907195.html
Copyright © 2020-2023  润新知