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)

posted @ 2016-09-25 21:28  20145334赵文豪  阅读(133)  评论(2编辑  收藏  举报