20145216史婧瑶 《信息安全系统设计基础》第2周学习总结

20145216史婧瑶 《信息安全系统设计基础》第2周学习总结

教材学习内容总结

一、VIM

1、hjkl所表示的即为光标 ←↓↑→,前提是要在normal的状态下。方便记忆j像一个笔就像下箭头。

·i → Insert 模式,可插入文本。按 ESC 回到 Normal 模式.

·A → 输入欲添加文本(在一行后添加文本)。按 ESC 回到 Normal 模式.

·x → 删当前光标所在的一个字符。

·:wq → 存盘 + 退出 (:w 存盘, :q 退出)

2、删除类命令:

该命令为操作符d+删除格式

·dw可以从光标处删除至一个单词的末尾(normal模式下)

·d$从当前光标删除到行末

·de删除从当前光标位置直至单词末尾,不包括最后一个字符

·d number motion 可重复执行该操作(例如d2w指删除前两个单词)

·number(行个数) dd 删除x行

·撤销 u ;撤销撤销 Ctrl + R

·光标移动至行首0

3、输入p可以粘贴之前删除掉的内容

·输入r和一个字符可以替换当前光标所在的位置的字符

·输入cw和几个字符可以替换当前光标所在的位置的字符直至该字母结束的字符

·d number motion 替换文本

4、打开/保存/退出/改变文件(Buffer)

·:e → 打开一个文件

·:w → 存盘

·:saveas → 另存为

·:x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)

·:q! → 退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。

·:bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)

5、效率

·NG → 到第 N 行

·gg → 到第一行

·G → 到最后一行

·y → 从这里开始拷贝

·$ → 拷贝到本行最后一个字符

·v (可视化的选择)

·gU (变大写)

·gu (变小写)

·^ → 到本行的第一个非blank字符

·$ → 到行尾

·g_ → 到本行最后一个不是blank字符的位置。

·fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。

·t, → 到逗号前的第一个字符。逗号可以变成其它字符。

·3fa → 在当前行查找第三个出现的a。

·F 和 T → 和 f 和 t 一样,只不过是相反方向。

二、GCC

GCC相关概念:GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。

gcc编译程序的流程


1.gcc -E hello.c -o hello.i

2.gcc -S hello.i -o hello.s

3.gcc -C hello.o -o hello.o

4.gcc hello.o -o hello

首先gcc会调用预处理程序cpp,由它负责展开在源程序中定义的宏(上例:#include <stdio.h>),向其中插入#include语句所包含的内容(原地展开stdio.h包含的代码)

第二步,将hello.i编译为目标代码,gcc默认将.i文件看成是预处理后的C语言源代码,因此它会直接跳过预处理,开始编译过程。

第三步,gcc连接器将目标文件链接为一个可执行文件,一个大致的编译流程结束。

三、GDB

GDB相关概念:GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序。

如果要调试程序,需要在 gcc 编译可执行程序时加上 -g 参数,首先我们编译 bugging.c 程序,生成可执行文件:

1.gcc -g -o bugging bugging.c -m32

其中-o指定输出文件名, -m32 表示构建32位可执行程序,实验楼的环境是 64 位的 Ubuntu 14.04,所以默认会编译为 64 位的程序。

2.输入 gdb bugging进入 gdb 调试 bugging 程序的界面:

3.gdb bugging

在 gdb 命令行界面,输入run 执行待调试程序:

4.(gdb) run

在 gdb 命令行界面,输入quit 退出 gdb:

5.(gdb) quit

命令行界面使用技巧:

GDB命令补全

任何时候都可以使用 TAB 进行补全,如果只有一个待选选项则直接补全;否则会列出可选选项,继续键入命令,同时结合 TAB 即可快速输入命令。

部分 gdb 常用命令一览表

命令 简写形式 说明


list    l   查看源码

backtrace   bt、where    打印函数栈信息

next    n   执行下一行

step    s   一次执行一行,遇到函数会进入

finish      运行到函数结束

continue    c   继续运行

break   b   设置断点

info breakpoints        显示断点信息

delete  d   删除断点

print   p   打印表达式的值

run r   启动程序

until   u   执行到指定行

info    i   显示信息

help    h   帮助信息

GDB查询用法

在 gdb 命令行界面,使用 (gdb) help command可以查看命令的用法

执行 Shell 命令

在 gdb 命令行界面可以执行外部的 Shell 命令:

(gdb) !shell命令

例如查看当前目录的文件:

(gdb) !ls(查看当前目录文件)

GDB 断点

重新进入 debugging 调试界面

gdb bugging

查看源码

list 命令用来显示源文件中的代码

通过行号查看源码


list 行号,显示某一行附近的代码

list 文件名 : 行号,显示某一个文件某一行附近的代码,用于多个源文件的情况。

list 函数名,显示某个函数附近的代码

list 文件名 : 函数名,显示某一个文件某个函数附近的代码,用于多个源文件的情况。

设置断点

break 命令用来设置断点

通过行号设置断点

break 行号,断点设置在该行开始处,注意:该行代码未被执行。

break 文件名 : 行号,适用于有多个源文件的情况。

通过函数设置断点

break 函数名,断点设置在该函数的开始处,断点所在行未被执行。

break 文件名 : 函数名,适用于有多个源文件的情况。

四、makefile基本规则

makefile的好处就是当一个程序有多个文件时,每个文件的改变都会导致所有文件的重新编译,使用makefile能够记录文件的信息,决定什么时候重新编译链接。

1、Makefile文件规则:

·一个目标,即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如‘clean’

·一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。 之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令, 每个命

占一行,并以tab开头(初学者务必注意:是tab,而不是空格) 执行以上Makefile后就会自动化编译。

2、Makefile的一般写法:

·test(目标文件): prog.o code.o(依赖文件列表)

·tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)

3、Makefile还可以定义和使用宏(也称做变量):

·定义宏的格式为:macroname = macrotext

·使用宏的格式为:$(macroname)

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

问题:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?

解决方法:next:简记为 n,单步跟踪程序,当遇到函数调用时,也不进入此函数体;

step:遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。

Step命令,如果step命令将要运行的源代码行上有函数调用,那么step命令将导致GDB进入到被调用函数的内部。通常把step称为步入命令。

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

问题:进行GDB调试时,出现错误:

解决方法:由于生成的二进制可执行文件没有使用-g选项,

gcc中-g选项是为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制可执行文件。

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 30篇 300小时  
第一周 0/0 1/2 25/40 学习了Linux基础知识和核心命令 
第二周 0/0 0/2 0/40  
第三周 300/300 3/5 40/80
学习了vim、gcc、gdb指令;

学习了信息表示和处理

参考资料

  • 《深入理解计算机系统V2》学习指导
  • Vim编辑器
  • GDB 简明教程
  • Linxu系统编程:实验2、3、4
时间: 2024-10-18 11:44:10

20145216史婧瑶 《信息安全系统设计基础》第2周学习总结的相关文章

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

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

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

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

20145311 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 重新学习了一下上周的一部分命令:grep main wyx.c(grep的全文检索功能)ls > ls.txt :ls内容输出到文本find pathname -mtime -n/+nfind -size -n/+n (find的功能还是比较强大) 简单地学习了一下vim编辑器,跟着vimtutor简单地学了一些,在linux bash中使用vim能够极大地提高效率, vim的用法比较多,只学习了其中简单的一部分

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

20145339顿珠达杰<信息安全系统设计基础>第一周学习总结 ◆ Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 物理机系统上可以通过使用[Ctrl]+[Alt]+[F1]-[F6]进行终端和图形界面切换,在线实验环境中按下[Ctrl]+[Alt]+[F7]来完成切换.普通意义上的 Shell 就是可以接受用户输入命令的程序,Unix/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的

2017-2018-1 20155228 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155228 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 常见的存储技术 RAM 随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的.静态 RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多.SRAM用来作为高速缓存存储 器,既可以在CPU芯片上,也可以在片下.DRAM用来作为主存以及图形系统的帧缓冲 区.典型地,一个桌面系统的SRAM不会超过几兆字节,但是DRAM却有几百或几千兆 字节. SRAM将每

2017-2018-1 20155332 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155332 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 简单模型中,存储器是一个线性的字节数组.真实模型中,是一个具有不同容量,成本,访问时间的存储层次结构(存储器山) 程序的局部性很重要,对程序性能有很重要的影响. 计算机系统一个基本而持久的思想,如果你理解了系统是如何将数据在存储器层级结构中上下移动,你就可以编写程序,让数据存储在层次结构中较高的地方,从而CPU可以更快的访问到他们. 编写程序实现功能是最简单的,如何让编写的程序拥有最高的性能,例

2017-2018-1 20155227 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155227 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 第六章 随机访问存储器 随机访问存储器分为:静态RAM(SRAM)和动态RAM(DRAM),静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多. (1)静态RAM SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的. 属性:它可以无限制地保持在两个不同的电压配置或状态之一.其他任何状态都是不稳定的. 特点:由于SRAM的双稳态特性,只要有电,它就会永

2017-2018-1 20155334 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155334 <信息安全系统设计基础>第九周学习总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 教材学习内容总结 一.常见的存储技术: 基本的存储技术包括随机存储器(RAM).非易失性存储器(ROM)和磁盘. 1. RAM分静态RAM(SRAM)和动态RAM(DRAM). 2. SRAM快些,主要用做CPU芯片上的高速缓存,也可以用作芯片下的

2017-2018-1 20155331 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155331 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器层次结构 存储技术 随机访问存储器 随机访问存储器分为:静态的SRAM.动态的DRAM 静态RAM: SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值. 动态RAM: DRAM的特点:每一位的存储是对一个电容的充电:对干扰非常敏感. 用途:数码照相机和摄像机的传感器 DRAM存储不稳定的应对机制: 存储器系统必须周期性地通过读出,或者重