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])
-  ...
posted on 2016-09-25 19:56  20145206邹京儒  阅读(214)  评论(6编辑  收藏  举报