20145326蔡馨熠《信息安全系统设计》第2周学习总结

20145326蔡馨熠《信息安全系统设计》第2周学习总结

教材学习内容总结

一、计算机系统与链接

  • 信息就是位+上下文,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件。
  • 文件是字节序列
  • Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”。
  • 源文件到目标文件的转化由编译器驱动程序完成:gcc -o hello hello.cGCC编译器驱动程序读取源文件并把它翻译成一个可执行目标文件。翻译过程分为四个阶段:预处理、编译、汇编、链接,预处理器、编译器、汇编器、链接器一起构成编译系统。
  • 计算机系统是由硬件和系统软件组成的,程序被其他程序翻译成不同的形式,开始时是ASCII文本,然后被编译器和链接器翻译成二进制可执行文件
  • 系统的硬件组成:总线、I/O设备、内存、处理器
  • 并发:一个同时具有多个活动的系统。
  • 并行:用并发使一个系统运行地更快,并行可以在计算机系统多个抽象层次上运用。按照系统层次结构由高到低的顺序强调三个层次:线程级并发、指令级并行、单指令多数据并行
  • 处理器读取并解释存放在主存里的二进制指令
  • 操作系统内核是应用程序和硬件之间的媒介,提供三个基本的抽象:

a.文件是对I/O设备的抽象;
b.虚拟存储器是对主存和磁盘的抽象;
c.进程是对处理器、主存和I/O设备的抽象。

  • 网络提供了计算机系统之间通信的手段

  • 静态链接器主要任务:符号解析、重定位

  • 目标文件形式:可重定位目标文件、可执行目标文件、共享目标文件
  • 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。有三种不同的符号:

a.由m定义并能被其他模块引用的全局符号
b.由其他模块定义并被模块m引用的全局符号
c.只被模块m定义和引用的本地符号

二、Vim编辑器

VIMTUTOR是个实践教程,通过实践30分钟让你对VIM编辑器入门,只要在命令行中输入vimtutor,然后跟着教程练习就可以了~

1.一般操作
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模式前,可以一次执行多条命令。

2.三种常用模式的切换:

  • vim启动进入普通模式;
  • 处于插入模式或命令行模式时只需要按Esc即可进入普通模式;
  • 普通模式中按i(插入)进入插入模式;
  • 普通模式中按:进入命令行模式;
  • 命令行模式中输入wq回车后保存并退出vim。

3.进入vim:

  • 在终端中输入 vim 文件名;
  • 在终端中输入vim,进入vim界面中,进入命令行模式输入:e 文件路径(文件名)

4.游标移动(在普通模式下,按Esc进入普通模式):

按键说明
h
i
j
k
w移动到下一个单词
b移动到上一个单词

 

 

  • 命令行模式下保存文档:从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下。

  • 退出vim(常用):

a.命令行模式下退出vim:从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。 
b.普通模式下退出vim:普通模式下输入Shift+zz即可保存退出vim。

 

 

 

  • 快速缩进(缩进操作均在普通模式下有效):

a.使用命令进行快速调整缩进操作:通模式下输入15G,跳转到15行;普通模式下输入>>整行将向右缩进(使用,用于格式化代码超爽);普通模式下输入<<整行向左回退;普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数。
b.shiftwidth命令:shiftwidth命令是指>>命令产生的缩进(可以简写成sw) 普通模式下输入:进入命令行模式;对shiftwidth值进行设置可以控制缩进和回退的字符数。 获取目前的设定值:set shiftwidth?;设置缩进为10个字符:set shiftwidth=10

  • 调整文本位置:

a.命令行模式下输入:ce(center)命令使本行内容居中
b.命令行模式下输入:ri(right)命令使本行文本靠右
c.命令行模式下输入:le(left)命令使本行内容靠左

  • 查找:

a.普通模式下输入/向下查找,输入向上查找,n表示继续查找,N反向查找。
b.普通模式下输入\*寻找游标所在处的单词
c.普通模式下输入\#同上,但\*是向前(上)找,#则是向后(下)找
d.普通模式下输入g\*\*,但部分符合该单词即可
e.普通模式下输入g\#\#,但部分符合该单词即可

  • 使用vim编辑多个文件:

a.编辑多个文件有两种形式:一种是在进入vim前使用的参数就是多个文件;另一种就是进入vim后再编辑其他的文件。同时创建两个新文件并编辑$ vim 1.txt 2.txt 
b.默认进入1.txt文件的编辑界面:命令行模式下输入:n编辑2.txt文件,可以加!:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件;命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件。

  • 进入vim后打开新文件:

a.命令行模式下输入:e 3.txt打开新文件3.txt
b.命令行模式下输入:e#回到前一个文件
c.命令行模式下输入:ls可以列出以前编辑过的文档
d.命令行模式下输入:b 2.txt(或者编号)可以直接进入文件2.txt编辑 
e.命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
f.命令行模式下输入:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件
g.命令行模式下输入:f显示正在编辑的文件名
h.命令行模式下输入:f new.txt,改变正在编辑的文件名字为new.txt

  • 恢复文件:vim -r进入文档后,输入:ewcover 1.txt来恢复。

  • 创建加密文档:$ vim -x file1

三、GCC的使用

1.gcc 编译程序的流程:

  • 预处理:gcc –E cxy.c –o cxy.i;gcc –E调用cpp,产生预处理过的C原始程序
  • 编译:gcc –S cxy.i –o cxy.s;gcc –S调用ccl,产生汇编语言原始程序
  • 汇编:gcc –c cxy.s –o cxy.o;gcc -c调用as,产生目标文件
  • 链接:gcc cxy.o –o cxy;gcc -o调用ld,产生可执行文件
  • 运行:./cxy

2.库选项:-static(进行静态编译,即链接静态库、禁止使用动态库)、-shared(生成动态库文件、进行动态编译,在没有动态库时才会链接同名静态库)、-L dir(在库文件的搜索路径列表中添加dir目录)、-lname-fPIC(生成使用相对地址的位置无关的目标代码,然后使用gcc的-static选项从该PIC目标文件生成动态库文件)

3.静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文件);链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”。

  • 静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o
  • 静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx //链接到静态库;

 

4.共享库的生成:gcc -fPIC -c xxx.cgcc -shared -olibxxx.so xxx.o;共享库的使用:gcc -o main main.c -L. -lxxx

5.注册共享库的方法:

  • 修改/etc/ld.so.conf文件
  • 修改LDLIBRARYPATH环境变量
  • 将库文件直接复制到/lib或者/usr/lib目录下:cp (lib+name).so /lib

 

四、GDB的使用

  • 程序的运行状态有“运行”、“暂停”、“停止“三种。

  • 主要操作:

  • 查看文件:l

  • 设置断点:在b后加入相对应的行号。例b 6
  • 查看断点情况:设置完断点后键入info b,在gdb中可以设置多个断点。bt查询调用函数的情况
  • 运行代码:默认从首行开始运行代码,键入rr+行号:从该行号开始运行
  • 查看变量值:p变量。例:p n
  • 单步运行:nss会进入函数,n不会进入函数
  • 恢复程序运行:c
  • 帮助信息:h
  • 断点的设置:
  • 函数:b 文件名.c:函数名
  • 行:b 行数
  • 条件:b 行数 if 表达式(例如:b 9 if == 12)
  • 临时:tb [文件名:]行号或函数名 <条件表达式>

五、MakeFile的使用

  • 一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。其带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。
  • makefile文件编写规则:

a.目标文件:由make创建,通常是目标文件或可执行文件
b.依赖文件:创建目标体所依赖的文件
c.运行命令:创建每个目标体时需要的运行命令,必须以tab键开头
d.格式为:目标文件:依赖文件列表[tab键]各目标体运行命令(注意不是空格)
e.使用make的格式:make 目标文件

  • makefile变量的定义:

a.递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容
b.格式定义:VAR = var
c.展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用
d.格式定义:VAR := var
e.make中变量的使用格式: $(变量名)
f.变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感

学习过程中的问题

1.进行GDB调试时,出现错误!

 

原因及解决:原因是生成的二进制可执行文件没有使用-g选项。
gcc中-g选项是为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制可执行文件!

2.装git的过程中(生成公钥时),当使用命令cd ~/.ssh进入~/.ssh文件夹,输入gedit id_rsa.pub打开id_rsa.pub文件,发现里面是空白的,没有内容。

后来发现是输入 cd ~/.ssh 时出现了错误,“/”符号与“.”符号之间我多输入了一个空格字符。解决问题后,效果如下:

3.最后git push -u origin master的时候,命令行要求输入username,我混淆了概念,我一直输入的是“20145326蔡馨熠”,所以出不来结果,应该是登录时用的账号!

4.在自己的虚拟机上用makefile的时候,会出现“XXX is up to date”的问题。网上说好像用.PHONY来解决,我没搞懂。

 

 

代码托管情况及git安装

先要在Ubantu中安装git,使用命令: sudo apt-get install git

其次是设置用户名和用户邮箱,也就是自己在Git@OSC上注册的账号。

用git config --global user.name "xxx"   git config --global user.email "xxx"  

然后在ubuntu下生成公钥(id_rsa是私有秘钥,is_rsa.pub是公钥)

ssh-keygen -t rsa -C "413741392@qq.com"

创建完公钥后,需要上传。使用命令  cd ~/.ssh 进入~/.ssh文件夹,输入gedit id_rsa.pub打开id_rsa.pub文件,复制其中所有内容。接着访问http://git.oschina.net/key网页,标题栏可以随意输入,公钥栏把你刚才复制的内容粘贴进去就OK了。

可以测试是否连通:

ssh -T git@git.oschina.net

按照提示操作,如果联通,则出现如下信息:

Welcome to Git@OSC, 20145326蔡馨熠!

在ubuntu下新建一个文件夹 gitcode,然后cd到该文件夹下,把一些文件拷贝到该目录下。

mkdir gitcode

cd gitcode

接下来执行如下命令:

git init(初始化仓库)
git add .(这个点代表该目录下的所有文件)
git commit -m “20145326cxy”
此时工程中的所有文件都以提交到HEAD,但是还没有提交到服务器。

现在可以将代码提交到Git@OSC仓库了
先在Git@OSC项目中添加一个远程仓库origin
git remote add origin https://git.oschina.net/cxy368/caixinyi20145326.git
现在把本地项目master 分支推送到origin仓库
git push -u origin master

 

统计代码行数

心得体会

本周主要的学习内容就是vim,gcc,gdb以及makefile还有git的安装。其中,vim的使用方法重点在于练习,只有经过不断地练习才能熟练掌握并使用。gcc、gdb和makefile的使用方法有一定的命令格式和规则,只要遵循其规则格式就能够简单编译、运行、调试程序。计算机系统的相关知识重点在于记忆和理解,链接里面的用语有些生疏,一下子并不能完全理解,还需要再仔细看看并理解。因为自己电脑上的虚拟机特别卡,所以有时候会用实验楼环境,不过实验楼环境有时候没有注意操作的时间,会被强退掉,之前数据也会全部丢失,我就是因为这个原因,有一部分的代码敲在实验楼里,没有及时托管,被“吃掉”了,这很尴尬。这周没有安排好时间,把知识都堆在了周末来学,所以感觉任务很多,压力很大,git的知识也忘了很多,所以一开始整个人很压抑,效率也不高,但是又不想敷衍自己,于是在调整了自己的状态后,一步一步,按部就班的开始了我的学习任务,只求质量,不求数量。我仔细看了实验楼里的资料和书上的知识点后,开始动手操作,熟悉vim,gcc,gdb,makefile的相关用法,其实还算简单,因为给的例子特别生动形象,只需要熟记指令及用法,就没什么大问题。安装git的时候虽然中途也有很多问题,但都还是一一克服了,挺有成就感的,因为从头到尾都是靠的自己,这也算是学习的一种乐趣吧~我觉得,首先心一定要静下来,这将决定学习的质量,然后时间上要安排好,不要赶进度,要追求质量!提高自己的学习效率,千万不要敷衍!不然最终害的是自己,后面想补都补不回来。一开始就要赢在起跑线。这学期的课程还是娄老师给我们上,虽然平时要求严,不过相比上学期我觉得轻松多了,因为娄老师在课上讲的东西更多了,只要认真听,仔细做笔记,就会学得很轻松~ 我会再接再厉,尽最大努力将这门课学好~

学习进度条

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时 
第一周0/01/220/20 
第二周58/581/320/40 

转载于:https://www.cnblogs.com/cxy1616/p/5907614.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存放在外存上的数据关机后_小鑫话题 | 惊了!关机后SSD会丢数据?

今天小鑫在群里看到一个很有趣的话题&#xff0c;是关于SSD和HDD哪个更好的讨论。这个话题小鑫都已经见过不下十次了&#xff0c;但是今天小鑫看到了一句以前从没有看到的言论。(某交流群截图)看到这里&#xff0c;小鑫觉得网络上的“标题党”&#xff0c;可能已经在大做文章了…

2、Redis入门介绍

1、什么是Redis Redis&#xff1a;REmote DIctionary Server(远程字典服务器) 是完全开源免费的&#xff0c;用C语言编写的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的(key/value)分布式内存数据库&#xff0c;基于内存运行。并支持持久化的NoSQL数据库&#xff0c;是当…

Coursera公开课-Machine_learing:编程作业7

这周的编程作业主要是两方面内容。 1.K-means聚类。 2.PCA&#xff08;Principle Component Analys&#xff09;主成分分析。 方式主要是通过对图像的聚类实现压缩图像&#xff0c;后来发现PCA也可以通过对主特征值的提取实现压缩图像的目的。很有意思&#xff0c;具体的内容参…

mysql 中间件 atlas_Mysql中间件代理 Atlas

本文接上文介绍atlas的安装配置&#xff0c;以及借助keepalive软件实现altas的ha&#xff0c;避免由于atlas故障&#xff0c;导致数据库服务中断的情况出现&#xff1a;一&#xff1a;环境介绍Atlas 主&#xff1a;192.168.1.12/24Atlas 从&#xff1a;192.168.1.81/24Atlas vi…

idea快捷操作_IDEA插件系列 快捷键神器!Key Promoter X

今天起&#xff0c;会陆续给大家介绍一些IDEA的插件。正所谓工欲善其事必先利其器&#xff0c;一款好的插件可以帮我们提升开发效率&#xff0c;或者提升使用IDEA的幸福感&#xff01;今天要推荐的第一款插件 Key Promoter X 。相信很多新手甚至老手&#xff0c;对IDEA中的快捷…

if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...

来源&#xff1a;菜鸟分析 链接&#xff1a;https://zhuanlan.zhihu.com/p/34112508一天偶然发现知乎上有篇关于对python编程中的if __name__ main的理解陈述&#xff0c;看完之后&#xff0c;自己觉得不够简单明了&#xff0c;于是在其文章底部写了一句话&#xff0c;突然收获…

mongodb 教程一

mongodb是nosql&#xff08;not only sql&#xff09;的一种方式 。是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL - 代表着不仅仅是SQL- 没有声明性查询语言- 没有预定义的模式-键 - 值对存储&#xff0c;列存储&#xff0c;文档存储&#xff0c;图形数据库- 最…

向文件中追加内容

#echo abcbedf>>a.txt 将abcdef追加到a.txt文件末尾 往文件中写入内容&#xff0c;比如原来的a.txt文件内容是aaaaa&#xff0c; #echo bbbbb>a.txt&#xff0c;这个是bbbbb把a.txt原来的内容替换 这里注意 >是覆盖&#xff0c;>>是追加。 如果为多行输入,需…

kali linux改中文_【亲测实验】kali linux 2020 设置为中文方法

kali 2020.1可用进入我们的正题&#xff0c;修改为中文的步骤1.更换更新源打开终端&#xff0c;输入下边命令打开更新源的文件vim /etc/apt/sources.list在文件结尾加入下边更新源#中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src http:…

ubuntu 破解mysql密码_Ubuntu下忘记MySQL root密码解决方法

Linux下忘记MySQL root密码解决方法忘了mysql密码&#xff0c;从网上找到的解决方案记录在这里。编辑mysql的配置文件/etc/mysql/my.cnf&#xff0c;在[mysqld]段下加入一行“skip-grant-tables”121201191255521.png重启mysql服务ubuntu:~$ sudo service mysql restartmysql s…

面向对象编程其实很简单——Python 面向对象(初级篇)

在Python教学中发现&#xff0c;很多同学在走到面向对象编程这块就开始蒙圈了&#xff0c;为了帮助大家更好的理解面向对象编程并其能将其用到自己的开发过程中&#xff0c;特写此文。 概述 面向过程&#xff1a;根据业务逻辑从上到下写垒代码 函数式&#xff1a;将某功能代码…

python 单链表是否有回路_第5章 第1节 链表

● 请你说出几种基本的数据结构&#xff0c;参考回答&#xff1a;常见的基本的数据结构有链表、栈、队列、树(只列出面试常考的基本数据结构)1、链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系…

linux mysql管理软件_8款适合Linux用户使用的数据库管理工具!

从内容管理系统到简单的表格&#xff0c;数据库是每一个开发项目的一部分。这就是为什么开发者们如此强调使用正确类型的数据库工具。下面这些可能对您有所帮助&#xff01;Autotabla是一个你的程序的SQL数据表的CGI管理界面。只需要提供你数据库架构的XML描述&#xff0c;你就…

jq 下拉加载每次只执行一次_记一次 无限列表 滚动优化

背景长列表优化&#xff0c; 是页面性能优化中的一个比较常见的问题&#xff0c;也是面试中的常客。刚好最近在的项目中&#xff0c; 遇到了一个长列表的性能问题&#xff0c;试过多种方案&#xff0c; 最后得以解决。今天就给大家分享一下。正文场景描述用户需要批量修改 Prod…

mysql fio测试_Linux下 fio磁盘压测笔记

专业的测试磁盘IO性能的软件&#xff1a;1、fio 【推荐使用】2、iometerfio的使用&#xff1a;参考博客&#xff1a; http://lilinji.blog.51cto.com/5441000/1569623https://linux.die.net/man/1/fiohttp://elf8848.iteye.com/blog/2168876 【讲的比较好】注意&#xff0c;我…

清除浮动塌陷的4种经典套路

【自古深情留不住&#xff0c;总是套路得人心。】 这些日子&#xff0c;各个朋友圈随时可以见到这句话的身影。的确人们常说&#xff1a;“多一点真诚&#xff0c;少一点套路。”&#xff0c;但是最终现象写实也是那么残酷和无奈。 同样在前端攻城狮的道路&#xff0c;我们都是…

mysql standalone模式_Boss7 Standalone模式开发配置

PS&#xff1a;以下配置均添加到standalone.xml文件中。1.Get请求编码设置&#xff0c;将如下配置添加到标签之后2.开启开发模式&#xff1a;搜索“urn:jboss:domain:web:1.1”&#xff0c;在此标签下添加如下配置&#xff1a;3.虚拟域名设置搜索“urn:jboss:domain:web:1.1”&…

python ide: pycharm

1, 设置python路径 2&#xff0c;运行py文件 https://www.jetbrains.com/help/pycharm/2016.1/creating-and-running-your-first-python-project.html#d50296e226 3, 格式化代码 From the main menu, select Code | Reformat Code or press CtrlAltL. 转载于:https://www.cnblo…

Android 滑动菜单框架--SwipeMenuListView框架完全解析

SwipeMenuListView&#xff08;滑动菜单&#xff09; A swipe menu for ListView.--一个非常好的滑动菜单开源项目。 Demo 一、简介 看了挺长时间的自定义View和事件分发&#xff0c;想找一个项目练习下。。正好印证自己所学。 在github上找到了这个项目&#xff1a;SwipeMenuL…

JAVA 开发axis2_基于Apache axis2开发Java Web服务

1.安装配置axis2环境下载好后把axis2-1.4.1-war目录下面的axis2.war发布到tomcat的webapps中。发布好&#xff0c;访问&#xff1a;http://localhost:8079/axis2/ 界面如下&#xff1a;2.开发web服务1)创建一个java web project2)编写服务代码1 public classSampleService {23…