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

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

教材学习内容总结

vim

VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码。在实验楼中,只要在命令行中输入vimtutor,然后跟着教程练习就可以。

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

      :set ai 自动缩行

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

  • 移动光标
      [[ 转到上一个位于第一列的"{"

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

      { 转到上一个空行

      } 转到下一个空行

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

GCC

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

  • 预处理: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最基本的命令有:

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

Linux下C语言开发基础练习

教材第一章

  • 信息就是位+上下文,系统中所有信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网上传送的数据,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件。
  • Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”。
  • 源文件到目标文件的转化由编译器驱动程序完成,unix> gcc -o hello hello.c 这里GCC编译器驱动程序读取源文件并把它翻译成一个可执行目标文件。翻译过程分为四个阶段:预处理、编译、汇编、链接,预处理器、编译器、汇编器、链接器一起构成编译系统。
  • 系统的硬件组成:总线、I/O设备、内存、处理器
  • 并发:一个同时具有多个活动的系统。并行:用并发使一个系统运行地更快,并行可以在计算机系统多个抽象层次上运用。按照系统层次结构由高到低的顺序强调三个层次:线程级并发、指令级并行、单指令多数据并行
  • 计算机系统是由硬件和系统软件组成的,程序被其他程序翻译成不同的形式,开始时是ASCII文本,然后被编译器和链接器翻译成二进制可执行文件
  • 处理器读取并解释存放在主存里的二进制指令

教材第七章

  • 静态链接器主要任务:符号解析、重定位

  • 目标文件形式:可重定位目标文件、可执行目标文件、共享目标文件

  • 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。有三种不同的符号:

        ①由m定义并能被其他模块引用的全局符号
        ②由其他模块定义并被模块m引用的全局符号
        ③只被模块m定义和引用的本地符号

Vim编辑器

Vim共有六种模式:

  • 普通模式(Normal mode)
  • 插入模式(Insert mode)
  • 可视模式(Visual mode)
  • 选择模式(Select mode)
  • 命令行模式(Command line mode)
  • Ex模式(Ex mode)

三种常用模式的切换

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

  • 输入以下命令进入Vim$ vim practice_1.txt

  • 直接使用vim也可以打开vim编辑器,但是不会打开任何文件。$ vim

  • 进入vim后,按下i键进入插入模式。在该模式下可以输入文本信息。

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

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

  • 从普通模式输入:进入命令行模式,输入w回车,保存文档。

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

  • 其它几种退出方式:

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

Vim文档编辑

  • 行间跳转小技巧:在完成依次跳转后,可以使用Ctrl+o快速回到上一次(跳转前)光标所在位置,这个技巧很实用,比如当你在写代码时,忽然想起有个bug,需要修改,这时候你跳过去改好了,只需要按下Ctrl+o就可以回到你之前的位置。

  • 复制及粘贴文本

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

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

  • 剪切及粘贴

前面讲得dd删除命令就是剪切,每次dd删除文档内容后,便可以使用p来粘贴,这一点可以让我们实现一个很爽快的功能——交换上下行:ddp,就这么简单,即实现了快速交换光标所在行与它下面的行。

Linux系统编程

  • gcc的使用

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主要调试的是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)

学习中的问题和解决过程

问题1:在xfce用vim的时候, 输入10x,却没有反应,没有像教程说的那样 可以删除10个连续字符。
解决:之前之所以不行,是因为在我指定的那一行上,光标后面已经没有内容了。 由于 10x(小写)命令是删除光标后面的内容的,并且不会删除到下一行的内容。 所以在这种情况下使用该命令时,只会删除光标下的一个字符。10X(大写)则是往光标前面删除。

问题2:在实验环境中,按Esc 无法退回普通界面,刷新界面后也没用。
解决:搜索了一下好像很多人都会有这种问题,有可能是电脑和按键的问题,也有可能是浏览器的原因。后面换了Chrome浏览器就可以了。

问题3:在用Gvim编辑代码时,一开始我储存文件名为hello,并在下方选项里选择保存为.c/.h文件,但是这样保存并不能在Xfce终端里运行打印代码。
解决:需要将文件名直接保存为hello.c,这样就可以运行了。

本周代码托管截图

其他(感悟、思考等,可选)

  • 本周的学习任务主要是通过对vim编辑器、GCC以及GDB的应用,了解Linux下C语言编程基础,我在本周的学习中了掌握了vim编辑器的基本模式、保存退出、光标跳转、删除复制等基本功能,初步了解到vim编辑器的优势。这次学习过程还是比较费劲的,首先是接触练习一个全然陌生的东西,对于我来说还是有很大困难的。其实是我看书,与做实验,这两者有一定部分重复的内容,然而我没有很好地联系在一起,导致练习vim全部实验内容练习了多遍才明白大概。以后我会在一周周的作业中,充分联系与使用教材,辅导书,讲解视频,实验指导书等教学资源,掌握自学能力,这样将会使以后的人生中获益无穷。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0 2/2 20/20
第二周 100/100 1/ 3 20/40

参考资料

原文地址:https://www.cnblogs.com/m3182218/p/5904211.html