20145335 《信息安全系统设计基础》第2周学习总结
20145335 《信息安全系统设计基础》第2周学习总结
教材学习内容总结
教材知识点:
第1章:
-
计算机系统是由硬件和系统软件组成的;信息是由位+上下文构成的.
-
只由ASCII字符构成的文件称为文本文件,所有其他文件都成为二进制文件。
-
系统的硬件组成:
- 总线:贯穿整个系统的一组电子管道。
- I/O设备:输入/输出设备。
- 主存:临时存储设备,用来存放程序和程序处理处理的数据。
- 处理器:中央处理单元,简称处理器。
-
储存设备形成层次结构:
从上之下,设备变得访问速度越来越慢,容量也越来越大,并且每字节造价也越来越低
储存器结构的主要思想是一层上的存储器作为低一层存储器的高速缓存。
-
进程是操作系统对一个正在运行的程序的一种抽象。需要运行的进程数是多于可以运行他们的cpu个数的。一个cpu看上去都像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的。操作系统的这种交错机制称上下文交换。
-
处理器读取并解释存放在主存里的二进制指令。
-
操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象:1)文件是对I/O设备的抽象;2)虚拟存储器是对主存和磁盘的抽象;3)进程是对处理器、主存和I/O设备的抽象。
-
网络提供了计算机系统之间通信的手段。从特殊系统的角度来看,网络就是一种I/O设备。
第7章:
-
链接可以在编译时由静态编译器来完成,也可以在加载时和运行时由动态链接器来完成。
-
链接处理器分为:1)可重定位的、2)可执行的、3)共享的
-
静态链接器是由像GCC这样的编译驱动器调用的。
-
多个目标文件可以被链接到一个单独的静态库中。
-
加载器将可执行文件的内容映射到存储器,并运行这个程序。
-
被编译为位置无关代码共享库可以加载到任何地方,也可以在运行时被多个进程共享,为了加载、链接和访问共享库的函数和数据,应用程序还可以在运行时使用动态链接。
Vim编辑器
-
vim可以仅仅通过键盘在任意模式之中进行切换,vim有6中模式(其中3种为常用模式):
- 普通模式(常用模式)
- 插入模式(常用模式)
- 命令行模式(常用模式)
- 可视模式
- 选择模式
- EX模式
-
进入vim
在终端输入
vim+文件名
若不存在该文件名的时候系统则会新建一个文件
-
光标的移动
H
:向左移动J
:向下移动K
:向上移动L
:向右移动
(注:键盘的上下左右键也可以对光标进行移动)
-
vim的退出:
Esc键
:确保处在正常模式即普通模式输入
:q!
退出编辑器 -
vim文本插入类命令(进入插入模式,按Esc退出到普通模式):
i
:当前光标处进行编辑a
:在当前光标后插入编辑o
:在当前行后插入一个新行(也属于打开类命令)A
:添加文本I
:在行首插入O
:在当前行插入一个新行(也属于打开类命令)
-
vim文本删除类命令:
x
:删除当前光标所在位置的字符dw
:从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符de
:从当前光标当前位置知道单词末尾,包括最后一个字符d$
:从当前光标当前位置知道当前行末dd
:删除当前光标所在的整行
注:删除命令可以配合使用计数指定动作,以删除更多。
如:
d2w
(删除两个大写字母单词)、2dd
(删除两行等)正常模式下修改命令的格式:
operator(操作符) [number](可以附加的数字,代表次数) motion(动作)
-
vim替换和撤销类命令:
r+替换字母
:将光标所在的字符进行替换成所替换字母。R
:连续替换,直到ESCcc
:替换整行,即删除光标所在行cw
:替换一个单词,即删除一个单词ce
:更改文本直到一个单词的末尾(cw键类似)C
:替换光标以后至行末u
:撤销当前的修改
注:使用c可以更改更多
更改类操作符操作格式:
c [number] motion
如:
c$
更改光标之后整行 -
vim搜索类命令:
-
/+字符串
:在当前文件中查找该字符串 -
n
:查找同上一次的字符串,可在同一方向上查找 -
N
:向相反方向查找同上一次的字符串 -
用?代替/
:逆向查找字符串 -
ctrl+O
:回到之前的位置 -
ctrl+I
:跳转到较新的位置
注: 查找到达文件末尾后,会自动从文件头部继续查找
-
-
vim的退出(常用):
- 命令行模式下退出vim:从普通模式输入:进入命令行模式,输入
wq
回车,保存并退出编辑。 - 普通模式下退出vim:普通模式下输入
Shift+zz
即可保存退出vim
- 命令行模式下退出vim:从普通模式输入:进入命令行模式,输入
-
vim的其他功能:
-
关于保存文件的更多信息
:w TEST
:以TEST为文件名保存整个文件:!del TEST
:在MS-DOS下删除TEST文件:!rm TEST
:在unix下删除TEST文件 -
具有选择性的保存命令
可视模式下保存文件的部分内容:
v motion:w FILENAME
- 移动光标
- 按
v
键,移动光标,文本高亮 - 按
:
键,屏幕底部出现:’<,’> - 输入
w TEST
(TEST是未被使用的文件名),回车 - 使用
:!dir
或:!ls
查看存储的文件
-
设置类命令选项
输入:
set xxx可以设置
xxx选项:
‘ic’ ‘ignorecase’
查找时忽略字母大小写‘is’ ‘incsearch’
查找短语时显示部分分配‘hls’ ‘hlsearch’
高亮显示所有的匹配短语选项名可以用完整版本,也可以用缩略版本
禁用忽略大小写:
:set noic
移除匹配项的高亮显示:
:nohlsearch
仅在一次查找时忽略字母大小写
:\c:/ignore\c<回车>
以下是实验中的截图
-
GCC
GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统
- 预处理:
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
前三步,GCC的参数连起来是“ESc”,相应输入的文件的后缀是“iso”
-
GCC常用选项
-
c
只编译不链接,生成目标文件.o -
S
只编译不汇编,生成汇编代码 -
E
只进行预编译,不做其他处理 -
g
在可执行程序中包含标准调试信息 -
o file
将file文件指定为输出文件 -
v
打印出编译器内部编译各过程的命令行信息和编译器的版本 -
I dir
在头文件的搜索路径列表中添加dir目录
-
-
库选项:
-
static
进行静态编译,即链接静态库,禁止使用动态库 -
shared
1.可以生成动态库文件2.进行动态编译,尽可能的链接动态库,没有动态库时才会链接同名静态库 -
L dir
在库文件的搜索路径列表中添加dir目录 -
lname
链接称为libname.a或者libname.so的库文件。如果两个库文件都存在,根据编译方式是static还是shared进行链接 -
fPIC
生成使用相对地址的位置无关的目标代码,
GDB
-
基本命令:
gdb programm
(启动GDB)b
设断点(要会设4种断点:行断点b [行数或函数名] <条件表达式>
、函数断点b [函数名] <条件表达式>
、条件断点b [行数或函数名] <if表达式>
、临时断点tbreak [行数或函数名] <条件表达式>
)
-
run
开始运行程序 -
bt
打印函数调用堆栈 -
p
查看变量值 -
c
从当前断点继续运行到下一个断点 -
n
单步运行 -
s
单步运行 -
quit
退出GDB -
其他几个应该掌握的调试命令有:
display
跟踪变量值的改变until
跳出循环finish
跳出函数help
帮助
教材学习中的问题和解决过程、
-
如何运行程序
在编译好了之后,发现并不知到怎么运行程序,经过上网查询和搜索,知道了
./文件名
是运行程序的 -
在做实验的时候遇到了这个问题
在gdb上出现了问题
按书上步骤编译时gcc -g add.c sub.c mul.c div.c main.c -o main ,结果gdb正常如下图
是因为加上了选项-g。
本周代码托管截图
本周在尝试训练编译了一些简单的代码,已经上传到开源中国。
链接地址https://git.oschina.net/20145335/Linux-besti-is-20145335.git
其他(感悟、思考等,可选)
这一周的学习任务相对还是好一些的,任务认认真真完成,仔细小心还是可以完成的,但是毕竟这一周的知识属于硬知识,很多命令行需要去记忆,总之还是要多学多练,才会更有效果
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 050/200 | 1/2 | 10/20 | |
第二周 | 180/500 | 1/4 | 26/38 |