20145217《信息安全系统设计基础》第2周学习总结
教材学习内容总结
vim
vim可以仅仅通过键盘在任意模式之中进行切换,这就使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作,对文字录入员或者程序员可以大大增强速度和效率。vim有6种基本模式(常用的是普通模式、插入模式和命令行模式):
普通模式(Normal mode):在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。在普通模式中,进入插入模式比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
插入模式(Insert mode):在插入模式中,可以按ESC键回到普通模式。
可视模式(Visual mode):命令多与字母v有关,移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。
选择模式(Select mode):这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
命令行模式(Command line mode):在命令行模式中,执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
Ex模式(Ex mode):这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。
三种常用模式的切换:
vim启动进入普通模式;
处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式;
普通模式中按i(插入)或a(附加)键都可以进入插入模式;
普通模式中按:进入命令行模式;
命令行模式中输入wq回车后保存并退出vim。
进入vim:
在终端中输入 vim 文件名;
在终端中输入vim,进入vim界面中,进入命令行模式输入:e 文件路径(文件名)
gcc
gcc编译程序的流程(参数是ESc,文件的后缀是iso):
预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp,产生预处理过的C原始程序
编译: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,产生可执行文件
运行:./hello
gcc编译常用选项:-E(只预编译)、-S(只编译不汇编)、-o(将file文件指定为输出文件)、-c(只编译不链接)、-I dir(在头文件的搜索路径列表中添加dir目录)、-g(在可执行程序中包含标准调试信息)
库选项:-static(进行静态编译,即链接静态库、禁止使用动态库)、-shared(生成动态库文件、进行动态编译,在没有动态库时才会链接同名静态库)、-L dir(在库文件的搜索路径列表中添加dir目录)、-lname、-fPIC(生成使用相对地址的位置无关的目标代码,然后使用gcc的-static选项从该PIC目标文件生成动态库文件)
静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文件);链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”。
静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o;
静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx //链接到静态库;
注意:-L:在库文件的搜索路径列表中添加dir目录,-l: 在头文件的搜索路径列表中添加dir目录。
gdb
程序的运行状态有“运行”、“暂停”、“停止“三种。
主要操作:
查看文件:l
设置断点:在b后加入相对应的行号。例b 6
查看断点情况:设置完断点后键入info b,在gdb中可以设置多个断点。bt查询调用函数的情况
运行代码:默认从首行开始运行代码,键入r;r+行号:从该行号开始运行
查看变量值:p变量。例:p n
单步运行:n或s,s会进入函数,n不会进入函数
恢复程序运行:c
帮助信息:h
断点的设置:
函数:b 文件名.c:函数名
行:b 行数
条件:b 行数 if 表达式(例如:b 9 if == 12)
临时:tb [文件名:]行号或函数名 <条件表达式>
Makefile
一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。其带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。
makefile文件编写规则:
目标文件:由make创建,通常是目标文件或可执行文件
依赖文件:创建目标体所依赖的文件
运行命令:创建每个目标体时需要的运行命令,必须以tab键开头
格式为:目标文件:依赖文件列表 [tab键]各目标体运行命令(注意不是空格)
使用make的格式:make 目标文件
makefile变量的定义:
递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容
格式定义:VAR = var
展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用
格式定义:VAR := var
make中变量的使用格式: $(变量名)
变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感
使用git
输入git后系统提示安装,安装后就可以使用。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第二周 | 200/200 | 1/3 | 12/25 |