20145319 《信息安全系统设计基础》第2周学习总结
20145319 《信息安全系统设计基础》第2周学习总结
一 教材内容总结
vi的基本操作
-
简介:vi编辑器是所有Unix及Linux系统下标准的编辑器,就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器,是我们使用Linux系统不能缺少的工具
-
vi的使用:vi可以分为三种状态,分别是一般模式、编辑模式和命令行模式,各模式的功能区分如下
-
vi的一般模式:以vi打开一个文件就直接进入一般模式了,在这个模式中, 你可以使用h,j,k,l(也可以使用方向键)按键来移动光标,你可以使用删除字符或删除整行来处理文件内容, 也可以使用复制、粘贴来处理你的文件数据。
-
vi的编辑模式:一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容,当到你按下
i, I, o, O, a, A, r, R
会进入相应编辑模式,此时才可以进行编辑。按下Esc
即可退出编辑模式。 -
vi的命令行模式:输入
: / ?
三个中的任何一个,就可以将光标移动到最底下。在这个模式中,查找、读取、存盘、替换字符、离开vi、显示行号等的动作则是在此模式中完成的 -
vi的常用命令:
i
:从目前光标所在处插入;I
:在目前所在行的第一个非空格符处开始插入;o
:在目前光标所在的下一行处插入新的一行;a
:从目前光标所在的下一个字符处开始插入;r
:取代光标所在的那一个字符一次. -
vi的常用命令(命令行模式):
:w
:保存编辑的内容;:w filename
:另存为;:q
:离开vi;:q!
:不保存离开;:wq
:保存后离开 -
vi的一些其他用法:在vim中有一款插件可以支持多文件编辑
-
: table filename1
:在新的页面编辑filename1文件- 同时编辑两个文件;
vim 1.c 2.c
- 同时编辑两个文件;
GCC常用命令
-
以最简单的helloworld.c为例子,假如我们已经写好了一个helloworld的程序,即我们有了一个helloworld.c文件,但是要让机器say hello只有helloworld.c是不够的,这时候我们要进行处理
gcc helloworld.c -o helloworld
,这时候我们发现当前目录下就会有一个helloworld文件,我们只需要./helloworld
就能让机器say hello了 -
详细的来说上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking),(生成文件后缀分别是iso)。
-
预处理:
gcc –E helloworld.c –o helloworld.i
;gcc –E调用cpp,产生预处理过的C原始程序 -
编译:
gcc –S helloworld.i –o helloworld.s
;gcc –S调用ccl,产生汇编语言原始程序 -
汇编:
gcc –c helloworld.s –o helloworld.o
;gcc -c调用as,产生目标文件 -
链接:
gcc helloworld.o –o helloworld
;gcc -o调用ld,产生可执行文件 -
多模块编译:例如
gcc hello1.c hello2.c -o hello
-
检错:例如
gcc -pedantic hello.c -o hello
,或者gcc -Werror hello.c -o hello
在编译程序时带上-Werror选项,那么GCC会在所有产生警告的地方停止编译,我们就可以借此对程序进行修改
GDB调试技术
-
在使用vs编写代码时,当程序最终运行出现错误时,我们就不得不回过头来检查我们的程序,这时候,我们就需要用到vs中的debug调试器,通过设定断点,来一步步运行我们的程序并查看每一步中参数的变化以及结果来判断出程序中的错误。在此,gdb编提供了我们断点调试的功能。
-
l
:查看文件 -
b
:设置断点1.函数断点:
b main
:在main函数下设置断点2.行断点:
b num
:在第num行下设置断点3.临时断点:
tb num
:在第num行下设置临时断点(断点使用一次之后消失)4.条件断点:
b num if i=8
: -
r
:run,运行函数,r num
从第num行开始运行 -
p
:print,输出查看变量值,p i
输出i的值 -
n & s
:next & step,单步执行,s会进入函数,n将会一步执行完函数 -
例子:
makefile
-
功能: 多文件的好处:可以将一个大项目分成多个小的部分,独立开来,利于结构化管理
-
makefile文件编写规则:
1.目标文件:由make创建,通常是目标文件或可执行文件
2.依赖文件:创建目标体所依赖的文件
3.运行命令:创建每个目标体时需要的运行命令,必须以tab键开头
4.使用make的格式:make 目标文件
动态库和静态库
-
Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的
-
静态库链接时搜索路径顺序:
-
ld会去找GCC命令中的参数-L
-
再找gcc的环境变量LIBRARY_PATH
-
-
动态链接时、执行时搜索路径顺序:
-
编译目标代码时指定的动态库搜索路径
-
环境变量LD_LIBRARY_PATH指定的动态库搜索路径
-
-
默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库
二 课程中的问题和解决过程
- 在使用gdb之前编译文件要加上参数
-g
例如1gcc -g hello.c -o hello
否则会导致之后出现问题
- 在gdb中l一次性显示的行数有限,重复进行l操作即可以列出完整程序
posted on 2016-09-25 23:29 20145319钟轲 阅读(152) 评论(4) 编辑 收藏 举报