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 | 移动到上一个单词 |
- 3.进入插入模式
在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入
命令 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
cw | 替换从光标所在位置后到一个单词结尾的字符 |
注意每次要先回到普通模式才能切换成以不同的方式进入插入模式
- 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
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所定义的路径。
截图:
Makefile的使用
使用参考了实验楼的教程,就不在此复制粘贴了……
教材学习中的问题和解决过程
- 问题一:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?
GDB的next命令让GDB执行下一行,然后暂停。step命令的作用于此类似,只是在函数调用时step命令会进入函数,而next导致程序执行的暂停出现在下次调用函数时。DDD有对应的Next和Step菜单项。
答:
next:执行一行源代码但不进入函数内部。
step :执行一行源代码而且进入函数内部。
我认为应该优选step,通过GDB的next命令一次是移动一行代码,而通过step命令单步调试一段时间,更能够仔细检查靠近断点处的程序状态和行为。
代码调试中的问题和解决过程
- 1.在进行实验楼实验的学习中,代码编译出现一个错误:
- 2.经过对div.c的检查,删除了一个不小心打上的~号之后,成功
- 3.但是运行的结果中div一直是0,经过思考,应该是由于div.c中的a和b都是int型的,要想进行double运算需要一个类型转换所导致。
- 4.但是,不论是强制类型转换还是在div.c中变成return (a+0.0)/b,得到的结果依旧都是0.0000……
- 5.我尝试在Windows的VC++中编译了相同的程序,得到的结果却是正确的!!!
- 6.陷入沉思……并不知道为什么?难道是因为不同系统的规定不一样……?
- 7.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so
- 8.编写makefile,让代码编译,上述静态库和共享库的使用自动化。
课程学习中的问题和解决过程
- 一、在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.首先,我按照在百度上找到的教程生成公钥:
2.然而,在添加过公钥进行链接测试的时候出现了问题:
无法连接……这个问题各种查资料……重新生成公钥等等摆弄了半天都没有成功,然而最后惊觉我使用的是开源中国而不是github……咳……
3.接下来进行正确的git连接,还是出现了问题:
经过百度,在一个全英文的网页上看到了奇怪的解决方法:
4.最终连接成功:
5.推送(一部分代码):
家庭作业中的问题和解决过程
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
本周代码托管截图
其他
感觉这周要学习的内容好多啊,不过更多的是学习一些在Ubuntu下的Vim基本操作以及一些很基础的原理。
这周即使按照课本以及实验楼的实验过了一遍还是觉得在实际用起来的时候很生疏,希望以后的学习中可以不断巩固。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第一周 | 0/0 | 2/2 | 10/10 | |
第二周 | 300/300 | 3/3 | 20/30 |
参考资料
- Makefile使用 - 实验楼
- 《深入理解计算机系统V2》学习指导
- GDB调试
- 简明Vim练级攻略
- Linux makefile 教程 非常详细,且易懂
- Linux系统编程 实验楼
转载于:https://www.cnblogs.com/alovera/p/5888080.html
20145212 《信息安全系统设计基础》第2周学习总结相关推荐
- # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结
2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...
- 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结
- 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...
- 20135203齐岳 信息安全系统设计基础第十三周学习总结
20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...
- # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结
20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...
- 20135219洪韶武——信息安全系统设计基础第五周学习总结
信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时 一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...
- 20145227《信息安全系统设计基础》第一周学习总结
20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...
- 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结
2018-2019-1 20165203 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名] 选项参数表 参数 对应功能 -E 仅执行编译预处理 ...
- 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结
2018-2019-1 20165221 <信息安全系统设计基础>第一周学习总结 教材学习总结 有关vim 打开方式:vim [文件名] 按i会进入insert模式,可以对代码进行编辑 按 ...
- 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结
2017-2018-1 20155209 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 计算机系统就是由可以看到的硬件和系统内的软件组成的,然后用来运行应用程序. 我们平时使用 ...
- 20145307《信息安全系统设计基础》第二周学习总结
20145307<信息安全系统设计基础>第二周学习总结 教材学习内容总结 vim编辑器 Vim的6种基本模式:Vim具有6种基本模式和5种派生模式普通模式(Normal mode) Vim ...
最新文章
- 中国科技巨擘(BAT)竞逐人工智能
- JAVA多线程之中断机制(如何处理中断?)
- Java绘图之设置字型和颜色
- WordPress Kyma plugin检测kyma连接状态的逻辑
- ubuntu 18.04下 配置qt opencv的坑
- 以眼睛的名义:一些光度学概念的解析
- scala----计数器zipWithIndex
- Python常用画图代码(折线图、柱状图、饼图)
- U盘刻录系统之后变小
- 计算机联锁进路控制程序框图,计算机联锁系统技术第四章
- 2019 年(B题)巡线机器人
- 显微镜C接口_激光共聚焦扫描显微镜搭建DIY
- AI(adobe illustrator)怎么设置导出图片的像素尺寸
- 超50万人推荐的神奇兼实用App,个个精品,打死也不能错过
- 谈判如何在谈判中_工资谈判软件开发人员指南
- python 百度云盘 数据迁移_python爬虫,爬取百度云盘,找你兄弟的机器活塞运动原理文件?...
- 研发质量管理的“红与黑”
- Numpy 获取数组的行和列
- HTTP状态码:400\500 错误代码(个人总结)
- 李宏毅Transformer
热门文章
- 支持向量机 回归分析_支持向量机和回归分析
- 情人节的第一道小点心
- Java入门, 线程
- PIC32单片机harmony开发环境搭建并新建harmony工程
- scope python_Python标准库Scope
- python中count的作用_python中内置的.count是什么?
- 485 九针头_张元英安宥真还是孩子,手臂还有疫苗接种痕迹,九针头太吓人
- 递归锁、信号量、GIL锁、基于多线程的socket通信和进程池线程池
- 算法学习——决策单调性优化DP
- 焦旭超 201771010109《面向对象程序设计课程学习进度条》