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…

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

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

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

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

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,…

下拉框选择

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文档的超链接无法打开的原因是文件在插入超链接之…

配置https

引子&#xff1a; 最近在一篇文章中了解到EFF(电子前哨基金会)为了推广https协议&#xff0c;成立了一个letsencrypt项目&#xff0c;可以发放免费的证书&#xff0c;此证书可以被大多数主流浏览器所信任&#xff0c;这个邪恶的念头一爆发&#xff0c;就让我走上了一条坎坷的不…

CentOS 6.5安装VNC server

1. 安装桌面&#xff0c;安装时选择了Desktop可以忽略 # yum groupinstall Desktop # yum install gnome-core xfce4 firefox 2. 安装VNC server # yum install tigervnc-server 3. 配置服务 # chkconfig vncserver on 4. 设置VNC用户密码 # vncpasswd 5. 配置文件 # vi /etc/s…

C#中数据类型及其转换知识点汇总

概念 C#中数据类型分为两大类&#xff0c;分别是值类型和引用类型。 值类型变量是从类 System.ValueType 中派生出来的&#xff0c;当声明一个值类型变量时&#xff0c;系统分配内存来存储值。 整形 包括8种类型&#xff0c;区别在于字节数和有无符号。 浮点型 float占用…

10亿个字符串的排序问题

一、问题描述 有一个大文件&#xff0c;里面有十亿个字符串&#xff0c;乱序的&#xff0c;要求将这些字符串以字典的顺序排好序 二、解决思路 将大文件切割成小文件&#xff0c;每个小文件内归并排序&#xff1b; 对所有的小文件进行归并排序——多重归并排序 三、解决方案 3.…

史上超全halcon常见3D算子汇总(一)

读取3D模型 read_object_model_3d 此算子用于读取3D对象。 read_object_model_3d( : : FileName, Scale, GenParamName, GenParamValue : ObjectModel3D, Status) FileName:文件名,halcon支持多种3d数据格式的读取,包括 .off, .ply, .dxf, .om3, .obj, .stl等格式。 1).…

Python:常用模块简介(1)

sys模块 >>> sys.platform #返回操作系统平台名称 win32 >>> sys.stdin #输入相关 <open file <stdin>, mode r at 0x000000000337B030> >>> sys.stdout #输出相关 <open file <stdout>, mode w at 0x000000000337…

Windows10 VS2019下使用CMake3.20.1打开PCL1.11.0程序

安装CMake 为什么要使用cmake cmake 是kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品&#xff0c;成为一个独立的开放源代码项目。 CMake是一个很强大的编译配置工具&#xff0c;支持多种平台和编译器&#xff0c;通过编写CMakeLists.txt&#xff0c…

Java 并发---ConcurrentHashMap

concurrent包下的并发容器 JDK5中添加了新的concurrent包&#xff0c;相对同步容器而言&#xff0c;并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了&#xff0c;这样保证了线程的安全性&#xff0c;所以这种方法的代价就是严重降低了并发性…

Windows10下安装QT5.14.2并用VS2019打开

安装 从官网下载&#xff1a;QT 安装方法仅需要注意&#xff1a; 1.最好不要安装在C盘。 2.根据开发需要安装功能模块&#xff0c;具体见参考文章。 https://jingyan.baidu.com/article/656db918d9292ae380249c4f.html 因为是用于PCL编程的&#xff0c;所以只选了msvc2017_64,…

C#中json序列化与反序列化

json格式概念 JSON(JavaScript Object Notation) 是一种轻量级的数据传输格式&#xff0c;其采用完全独立于语言的文本格式&#xff0c;使JSON成为理想的数据交换语言。 json由两种格式组成。 1.名称/值”对的集合&#xff0c;可以一起创建多个"名称 / 值对"。 { “…

volley用法之 以post方式发送 json 参数

需求是这样 我们需要发送一个post请求向服务器要参数。要求是发送的post参数也要是json格式。 简单一点的是这样的&#xff1a; 如果要发送的是这样简单的json格式&#xff0c;我们可以简单的使用map来实现&#xff1a; RequestQueue requestQueue Volley.newRequestQueue(get…