20145206 《信息安全系统设计基础》第2周学习总结
教材学习内容总结
·源程序实际上就是一个由值0和1组成的位(bit)序列,8个位被组织成一组,称为字节。每个字节表示程序中某个文本字符。
·在Unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:
unix> gcc -o hello hello.c
```GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello,翻译过程分为四个阶段:
·将系统中的存储设备划分成层次结构--CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。
·操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象:1)文件是对I/O设备的抽象;2)虚拟存储器是对主存和磁盘的抽象;3)进程是对处理器、主存和I/O设备的抽象。
·从特殊系统的角度来看,网络就是一种I/O设备。
## 实验楼学习内容
·实验二 Linux下C语言编程基础
1、vim
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924121953418-322671220.png)
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924122209934-2030074645.png)
2、gcc
能够编译用C、C++和Object C等语言编写的程序。GCC编译代码的过程如下:
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924122801309-585974978.png)
把编译过程分成四步,以编译hello.c生成可执行文件hello为例,如下图:
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924122841481-681189938.png)
·预处理: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
3、gdb
GDB最基本的命令有:
·gdb programm(启动GDB)
·b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
·run 开始运行程序
·bt 打印函数调用堆栈
·p 查看变量值
·c 从当前断点继续运行到下一个断点
·n 单步运行
·s 单步运行
·quit 退出GDB
应该掌握的调试命令有:
·display 跟踪变量值的改变
·until 跳出循环
·finish 跳出函数
·help 帮助
4、makefile
Makefile带来的好处就是——“自动化编译”,一但写好,只需要一个 make 命令,整个工程便可以完全编译,极大的提高了软件的开发效率(特别是对于那些项目较大、文件较多的工程)。
实践了一下实验楼上的实验:
·gcc -c code.c -o code.o
·gcc -c prog.c -o prog.o
·gcc prog.o code.o -o test
5、静态库和共享库
静态链接库的生成:ar rcsv libxxx.a xxx.o
静态库的使用: gcc -o main main.c -L. -lxxx 注意-L -l 的含义
共享库的生成 gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
共享库的使用:gcc -o main main.c -L. -lxxx
静态库、动态库(共享库)解决了不想给别人xxx.c时还要别人用xxx.c的功能的好办法。
·vim编辑器
首先安装好vim
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925140708691-2007677373.png)
1、Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
2、在插入模式中,可以按ESC键回到普通模式。
3、vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[(这在vim课程环境中不管用)即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模式中输入wq回车后保存并退出vim。
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925113319494-1437697142.png)
按Esc进入普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标。
按键 说明
h 左
l 右(小写L)
j 下
k 上
w 移动到下一个单词
b 移动到上一个单词
4、在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入
命令 说明
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置后到一个单词结尾的字符
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925113923895-1656411951.png)
注意每次要先回到普通模式才能切换成以不同的方式进入插入模式
5、从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925162434302-1528598157.png)
在实验楼中输入vim helloworld.c新建程序,然后输入i进入插入模式,输入一段helloworld程序,esc退出插入模式进入普通模式,再:wq退出并保存
如果下次再想找到这个程序,直接输入vim 文件名就行了。
6、从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑
命令 说明
:q! 强制退出,不保存
:q 退出
:wq! 强制保存并退出
:w <文件路径> 另存为
:saveas 文件路径 另存为
:x 保存并退出
:wq 保存并退出
普通模式下输入Shift+zz即可保存退出vim
7、进入普通模式,使用下列命令可以进行文本快速删除:
命令 说明
x 删除游标所在的字符
X 删除游标所在前一个字符
Delete 同x
dd 删除整行
dw 删除一个单词(不适用中文)
d$或D 删除至行尾
d^ 删除至行首
dG 删除到文档结尾处
d1G 删至文档首部
2dd表示一次删除2行
8、在普通模式下.(小数点)表示重复上一次的命令操作,普通模式下输入x,删除第一个字符,输入.(小数点)会再次删除一个字符,除此之外也可以重复dd的删除操作
9、进入普通模式输入N<command>,N表示重复后面的次数
例如:输入10x,删除10个连续字符
## 练习
1.练习vimtutuor至少一遍。
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924152125324-454754767.png)
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924155613543-723893766.png)
2 利用gcc编译hello.c程序:
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925141141554-649389103.png)
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925141929305-739867376.png)
3 git代码:
在百度上搜索怎样用ubuntu git代码,自己根据教程做出的过程如下:
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925145311713-1125536568.png)
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925145339997-1126648131.png)
代码上传结果:
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925160622616-1227891199.png)
## 学习中的问题和解决过程
在自己的电脑上直接输入vimtutor不能直接打开编辑器,需要安装,但在安装过程中出现如下问题:
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924155613543-723893766.png)
在百度上搜索找到解决办法:输入ps aux,找到-apt对应的数字4503,然后输入sudo kill 4503,成功安装!
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924161441496-980175223.png)
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160924161456637-1715535246.png)
## 本周代码托管截图
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160925160622616-1227891199.png)
## 其他(感悟、思考等,可选)
本周学会了一些基本用法,知道了怎样应用vim编译器在终端里编程序,了解了普通模式、命令行模式以及插入模式的切换方法,编译并运行成功程序,但实验楼中的知识点较多,不能完全掌握,还需要更多地练习来巩固。
## 学习进度条
| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| -------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 0/0 | 1/2 | 20/30 | 学习了一些Linux核心命令 |
| 第二周 | 250/250 | 1/3 | 20/50 | 学习了vim编辑器基础 |
## 参考资料
- [《深入理解计算机系统V2》学习指导]([http://www.cnblogs.com/rocedu/p/5826467.html])
- ...