20145212 《信息安全系统设计基础》第2周学习总结

20145212 《信息安全系统设计基础》第2周学习总结

教材学习内容总结

Vim基本操作

  • 1.使用vim命令进入vim界面

vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 打开Xfce终端,输入以下命令
$ vim practice_1.txt
直接使用vim也可以打开vim编辑器,但是不会打开任何文件。
$ vim
进入命令行模式后输入:e 文件路径 同样可以打开相应文件。

  • 2.游标移动
    按Esc进入普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标
按键说明
h
l
j
k
w移动到下一个单词
b移动到上一个单词

877181-20160920111457246-1704498076.png

  • 3.进入插入模式
    在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入
命令说明
i在当前光标处进行编辑
I在行首插入
A在行末插入
a在光标后插入编辑
o在当前行后插入一个新行
O在当前行前插入一个新行
cw替换从光标所在位置后到一个单词结尾的字符

877181-20160920111631793-669606358.png

注意每次要先回到普通模式才能切换成以不同的方式进入插入模式

  • 4.保存文档

命令行模式下保存文档

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

  • 5.退出vim

1.命令行模式下退出vim
从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑

2.以下为其它几种退出方式:

命令说明
:q!强制退出,不保存
:q退出
:wq!强制保存并退出
:w 另存为
:saveas 文件路径另存为
:x保存并退出
:wq保存并退出

3.普通模式下退出vim
普通模式下输入Shift+zz即可保存退出vim

  • 6、删除文本

1.普通模式下删除vim文本信息

进入普通模式,使用下列命令可以进行文本快速删除:

命令说明
x删除游标所在的字符
X删除游标所在前一个字符
Delete同x
dd删除整行
dw删除一个单词(不适用中文)
d$或D删除至行尾
d^删除至行首
dG删除到文档结尾处
d1G删至文档首部

除此之外,还可以在命令之前加上数字,表示一次删除多行,如:
2dd表示一次删除2行

GCC基本操作

  • 预处理: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

877181-20160920220354449-153982767.png
877181-20160920220403699-1033987384.png
877181-20160920220412043-1169635849.png
Tips:

1.Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可 sudo chmod u+x excutefile

2.作为Linux程序员,我们可以让gcc在编译的任何阶段结束,以便检查或使用该阶段的输出(这个很重要)

GDB基本操作

  • 建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。
  • 注意使用GCC编译时要加“-g”参数。 参考gdb参考卡GDB最基本的命令有:

0.gdb programm(启动GDB)
1.l 列出源码,相当于list
2.b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
3.run 开始运行程序
4.bt 打印函数调用堆栈
5.p 查看变量值
6.c 从当前断点继续运行到下一个断点
7.n 单步运行
8.s 单步运行
9.quit 退出GDB

  • 注:启动gdb的方法有以下几种:
    gdb <program> program也就是执行文件,一般在当前目录下。
    gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
    gdb <program> <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索得到。 gdb启动时,可以加上一些gdb的启动开关,详细的开关可以用gdb -help查看。下面只列举一些比较常用的参数: -symbols <file> -s <file> 从指定文件中读取符号表。 -se file 从指定文件中读取符号表信息,并把它用在可执行文件中。-core <file> -c <file> 调试时core dump的core文件。-directory <directory> -d <directory> 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

截图:
877181-20160925160632179-367012442.png
877181-20160925161709240-726982989.png
877181-20160925161819182-1456877982.png

Makefile的使用

使用参考了实验楼的教程,就不在此复制粘贴了……

教材学习中的问题和解决过程

  • 问题一:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?
    GDB的next命令让GDB执行下一行,然后暂停。step命令的作用于此类似,只是在函数调用时step命令会进入函数,而next导致程序执行的暂停出现在下次调用函数时。DDD有对应的Next和Step菜单项。

答:
next:执行一行源代码但不进入函数内部。
step :执行一行源代码而且进入函数内部。
我认为应该优选step,通过GDB的next命令一次是移动一行代码,而通过step命令单步调试一段时间,更能够仔细检查靠近断点处的程序状态和行为。

代码调试中的问题和解决过程

  • 1.在进行实验楼实验的学习中,代码编译出现一个错误:
    877181-20160924111216606-1236337032.png
  • 2.经过对div.c的检查,删除了一个不小心打上的~号之后,成功
    877181-20160924111226496-645913245.png
  • 3.但是运行的结果中div一直是0,经过思考,应该是由于div.c中的a和b都是int型的,要想进行double运算需要一个类型转换所导致。
    877181-20160924111235715-1867549576.png
  • 4.但是,不论是强制类型转换还是在div.c中变成return (a+0.0)/b,得到的结果依旧都是0.0000……
  • 5.我尝试在Windows的VC++中编译了相同的程序,得到的结果却是正确的!!!
    877181-20160924113145887-1241953597.png
    877181-20160924113152027-170594034.png
  • 6.陷入沉思……并不知道为什么?难道是因为不同系统的规定不一样……?
  • 7.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so
    877181-20160924121541793-563057740.png
  • 8.编写makefile,让代码编译,上述静态库和共享库的使用自动化。
    877181-20160924121551668-1081469897.png

课程学习中的问题和解决过程

  • 一、在vim下载过程中出现以下问题

E: 无法获得锁 /var/cache/apt/archives/lock – open (11 资源临时不可用)
E: 无法锁定下载目录

解决方法:
方法一 命令:ps -aux 列出进程 找到最后一列以apt-get 开头的进程 命令:sudo kill 该进程的PID
方法二: sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock

  • 二、在Ubuntu下使用git上传代码:

1.首先,我按照在百度上找到的教程生成公钥:
877181-20160924095810996-1792492929.png
877181-20160924100003309-703529246.png

2.然而,在添加过公钥进行链接测试的时候出现了问题:
877181-20160924100101043-343268280.png
无法连接……这个问题各种查资料……重新生成公钥等等摆弄了半天都没有成功,然而最后惊觉我使用的是开源中国而不是github……咳……

3.接下来进行正确的git连接,还是出现了问题:
877181-20160924100425309-761557426.png
经过百度,在一个全英文的网页上看到了奇怪的解决方法:
877181-20160924100633465-1289475584.png

4.最终连接成功:
877181-20160924095915887-879683529.png

5.推送(一部分代码):
877181-20160924114628106-1220607168.png

家庭作业中的问题和解决过程

  • 7.7 不改变任何变量名字,修改7.6.1中的bar5.c,使得fool5.c输出x和y的正确值
    答:输出错误的原因是全局符号x被多重定义,若想输出正确的值,可以将bar5.c中的x变成局部变量,将其移到void f()的括号中就可以了。

  • 7.8
    答:
    A.main.1,main.2;
    B.UNKNOWN;
    C.ERROR.

  • 7.9 的程序当在Linux系统中编译和执行时,即使p2不初始化变量main,它也能打印字符串“0x55\n”并正常终止。你能解释这一点吗?
    答:p2中的main是弱符号,链接器会把bar6.c中的main引用为foo6.c中的main,打印出来的应该是main函数指令第一个字节的地址。

  • 7.10 给出使得静态链接器能够解析所有符号引用的最小的命令行:
    答:
    A.gcc p.o libx.a p.o
    B.gcc p.o libx.a liby.a libx.a
    C.gcc p.o liby.a libx.a liby.a libz.a

本周代码托管截图

877181-20160925170522022-515779163.png
877181-20160925170607744-1426318590.png
877181-20160925170413939-1340810196.png
877181-20160925170425361-1248391061.png
877181-20160925170432362-262576827.png

其他

感觉这周要学习的内容好多啊,不过更多的是学习一些在Ubuntu下的Vim基本操作以及一些很基础的原理。
这周即使按照课本以及实验楼的实验过了一遍还是觉得在实际用起来的时候很生疏,希望以后的学习中可以不断巩固。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
第一周0/02/210/10
第二周300/3003/320/30

参考资料

  • Makefile使用 - 实验楼
  • 《深入理解计算机系统V2》学习指导
  • GDB调试
  • 简明Vim练级攻略
  • Linux makefile 教程 非常详细,且易懂
  • Linux系统编程 实验楼

转载于:https://www.cnblogs.com/alovera/p/5888080.html

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

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

相关文章

Opencv—— 拟合直线

概念 最小二乘法是勒让德( A. M. Legendre)于1805年在其著作《计算慧星轨道的新方法》中提出的。 最小二乘法就是通过最小化误差的平方和&#xff0c;使得拟合对象无限接近目标对象。在图像处理中主要用于拟合线&#xff0c;通过求采样点距离误差最小的线&#xff0c;可以是直…

本地搭建Dubbo监控中心的安装步骤

Dubbo监控中心的安装步骤 参考链接&#xff1a;http://blog.csdn.net/lichunan/article/details/40349645 一、从github上下载dubbo源码进行编译&#xff1a; 1、下载地址为&#xff1a; https://github.com/alibaba/dubbo.git2、编译源码命令&#xff1a;首先进入~/dubbo&am…

(转)SQLServer实例讲解

欢迎和大家交流技术相关问题&#xff1a; 邮箱: jiangxinnju163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://github.com/jiangxincode 知乎地址: https://www.zhihu.com/people/jiangxinnju 实例就是一个在数据库中存在的&#xff0c;现实的数据…

Basler相机SDK相关问题收集与知识汇总

1.心跳时间导致报错 此心跳非彼心跳,相机心跳是指过通过设置一个时间用于监测相机和网卡的连接,如果超过这个时间,相机就会释放跟网卡的连接,进入一种允许相机被再次连接的状态。 但此方式会导致相机SDK报错,经常显示在使用中,无可用连接,如何解决? 1.干等。不可取 2.…

14-会场安排问题

会场安排问题 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述学校的小礼堂每天都会有许多活动&#xff0c;有时间这些活动的计划时间会发生冲突&#xff0c;需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动&#xff0c;…

【TensorFlow】——实现minist数据集分类的前向传播(常规神经网络非卷积神经网络)

目录 一、常规神经网络模型 二、TensorFlow实现前向传播步骤 1、读取数据集 2、batch划分 3、根据神经网络每一层的神经元个数来初始化参数w,b 4、进行每一层输入输出的计算 5、对每一层的输出进行非线性relu函数变换 6、计算一个batch训练后的误差loss 7、计算每一次…

大道至简第二章

懒人造就了方法 开头说的&#xff0c;有一个人叫李冰也要移山&#xff0c;可是他却要用和愚公截然不同的方法&#xff0c;那就是用“烧”的方法来碎石&#xff0c;那么这样的好处就是省力。那么他又是怎样想到的办法的呢&#xff0c;就是生活中仔细观察他老婆做饭时水溢出是石头…

C# 回调函数详解

回调和回调函数是什么 软件模块之间存在着接口&#xff0c;而回调是一种双向调用模式&#xff0c;被调用方在接口被调用时也会调用对方的接口。 对于一般的结构化语言&#xff0c;可以通过回调函数来实现回调。回调函数是一个函数或过程&#xff0c;是一个由调用方自己实现&am…

神经网络(11)--具体实现:unrolling parameters

我们需要将parameters从矩阵unrolling到向量&#xff0c;这样我们就可以使用adanced optimization routines. unroll into vectors costFunction与fminunc里面的theta都是n1维的向量&#xff0c;costFunction的返回值gradient也是n1维的向量。 但是当我们使用神经网络时&#x…

[转]ASP.Net篇之Session与Cookie

本文转自&#xff1a;http://www.cnblogs.com/japanbbq/archive/2011/08/31/2160494.html Session: Session是“会话”的意思&#xff0c;然而&#xff0c;因为http协议是无状态的&#xff0c;那么每次客户端请求服务器端&#xff0c;服务器端都会以“崭新”的页面展示给客户端…

C# 接口详解

概念 接口描述的是可属于任何类或结构的一组相关行为&#xff0c;所以实现接口的类或结构必须实现接口定义中指定的接口成员。 定义&#xff1a;使用interface 关键字&#xff0c;由方法、属性、事件、索引器或这四种成员类型的任意组合构成。另可使用new、public、protected、…

js学习之地图生成

首先&#xff0c;上地图图片 接着&#xff0c;js&#xff0c;我们可以把图片看成一块块32*32像素的 var i; var j;window.onload function () {gamemap(15, 10, 10, "map.jpg"); }var mapimg new Image(); var map [[18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,…

linux性能分析常用的命令

1&#xff0c;uptime 查看系统负责2&#xff0c;more 分页查看文件&#xff0c;enter显示下一行&#xff0c;空格显示下一页&#xff0c;F显示下一屏&#xff0c;B显示上一屏内容。3&#xff0c;top命令查看系统情况&#xff0c;按shif H可以查看当前线程的负载。4&#xff0…

C#中Console.ReadKey()与ConsoleKey的一些用法

1.控制台程序不让窗口闪过 对于控制台程序&#xff0c;Console.ReadKey()可以使窗口停留一下&#xff0c;直到点击键盘任一键为止。 2.通过按键进行选择 key Console.ReadKey(true).Key;if (key ConsoleKey.S){ Console.Write("Input the message:…

【TensorFlow】——Windows10、pycharm、Python3.6.4中安装CPU和GPU两种版本的TensorFlow

tensorflow分为两种&#xff0c;一种是cpu版本&#xff0c;一种是gpu版本 CPU版本可以直接通过pip进行安装&#xff1a; 这里是在国内镜像源中进行的下载&#xff0c;下载的版本是2.2.0版本 pip --default-timeout1000 install tensorflow-cpu2.2.0 -i http://pypi.douban.c…

vsftpd.conf 详解与实例配置

#################匿名权限控制############### anonymous_enableYES   #是否启用匿名用户 no_anon_passwordYES   #匿名用户login时不询问口令 下面这四个主要语句控制这文件和文件夹的上传、下载、创建、删除和重命名。 anon_upload_enable&#xff08;yes/no)…

下拉框选择

1&#xff0c;简单下拉框 <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8" ><meta name"viewport" content"widthdevice-width, initial-scale1, user-scalableno, minimal-ui, maximum-scale1&qu…

基于C#的TCP/IP协议应用(一)

一、背景与概念 1.标准以太网 以太网是美国Xerox&#xff08;施乐&#xff09;公司的Palo Alto研究中心于1975年研制成功的&#xff0c;其核心技术起源于ALOHA网。目前以太网是指符合IEEE 802.3标准的局域网(LAN)产品组&#xff0c;其中IEEE 802.3是一组电气与电子工程师协会…

WORD文档的超链接无法打开——“由于本机的限制该操作已被取消”的解决方法

之前我电脑还很正常&#xff0c;最近装了一个打印机后&#xff0c;放在word文档的文字超链接就打不开了&#xff0c;提示说“由于本机的限制该操作已被取消”&#xff0c;请各位高手指导下该怎样解决这个问题&#xff1f; WORD文档的超链接无法打开的原因是文件在插入超链接之…