20145238 《信息安全系统设计基础》第2周学习总结
教材学习内容总结
一、VIM
1.VIM的安装如图:
2.VIM教程
通过在命令行输入vimtutor
有比较详细的VIM命令教程,以下是我根据学习总结出来的一些知识点。 ①·hjkl所表示的即为光标 ←↓↑→,前提是要在normal的状态下。方便记忆j像一个笔就像下箭头。 ·i → Insert 模式,可插入文本。按 ESC 回到 Normal 模式. ·A → 输入欲添加文本(在一行后添加文本)。按 ESC 回到 Normal 模式. ·x → 删当前光标所在的一个字符。 ·:wq → 存盘 + 退出 (:w 存盘, :q 退出) ②删除类命令: 该命令为操作符d+删除格式 ·dw可以从光标处删除至一个单词的末尾(normal模式下) ·d$从当前光标删除到行末 ·de删除从当前光标位置直至单词末尾,不包括最后一个字符 ·d number motion 可重复执行该操作(例如d2w指删除前两个单词) ·number(行个数) dd 删除x行 ·撤销 u ;撤销撤销 Ctrl + R ·光标移动至行首0 ③·输入p可以粘贴之前删除掉的内容 ·输入r和一个字符可以替换当前光标所在的位置的字符 ·输入cw和几个字符可以替换当前光标所在的位置的字符直至该字母结束的字符 ·d number motion 替换文本 ④打开/保存/退出/改变文件(Buffer) ·:e → 打开一个文件 ·:w → 存盘 ·:saveas → 另存为 ·:x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车) ·:q! → 退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。 ·:bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件) ⑤效率 ·NG → 到第 N 行 ·gg → 到第一行 ·G → 到最后一行 ·y → 从这里开始拷贝 ·$ → 拷贝到本行最后一个字符 ·v (可视化的选择) ·gU (变大写) ·gu (变小写) ·^ → 到本行的第一个非blank字符 ·$ → 到行尾 ·g_ → 到本行最后一个不是blank字符的位置。 ·fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。 ·t, → 到逗号前的第一个字符。逗号可以变成其它字符。 ·3fa → 在当前行查找第三个出现的a。 ·F 和 T → 和 f 和 t 一样,只不过是相反方向。 二、GCC
GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。 1.通常编译的过程可分为四步: ·预处理: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 2.gcc编译流程: linux 的可执行文件并没有像windows那样有明显的.exe后缀,只需要向其分配x(可执行)权限即可:sudo chmod u+x excutefile3.使用gcc编译hello world 首先打开vim编译 编译成功后如果没有出现error会在当前目录生成一个可执行的hello的新文件,继续输入:```./hello```便可以运行
4.执行gcc -E hello.c -o hello.i
此时gcc的-E参数可以让gcc在预处理结束后停止编译过程。默认将.i文件看成是预处理后的C语言源代码,因此它会直接跳过预处理,开始编译过程。5.gcc预处理源文件的时候(第一步),不会进行语法错误的检查 语法检查会在第二步进行,比如花括号不匹配、行末尾没有分号、关键字错误......
三、GDB
gdb(GNU debugger)该程序是一个调试器,是用来帮助程序员寻找程序中的错误的软件。1.gdb的功能:·启动程序,可以按照用户自定义的要求随心所欲的运行程序。·可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。·当程序停住时,可以检查此时程序中所发生的事。·动态地改变程序的执行环境。·从上面来看,gdb和一般的调试工具区别不大,基本上也是完成这些功能,不过在细节上,会发现gdb这个调试工具的强大。大家可能习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。 2.启动gdb的方法·gdb program也就是执行文件,一般在当前目录下。·gdb core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。·gdb 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。 3.常用命令一览表:命令 简写形式 说明 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 帮助信息 4.设置断点: 通过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称为步入命令。这也是与next命令的区别。
代码调试中的问题和解决过程
问题1.执行完gcc编译程序以后总是提示main找不到文件
之后只能再重新编译一次才正常显示。
问题2建立git链接
第一步cd (空格).ssh
cat id_rsa.pub
第三步 此时会给给你一串sshrsa 你只需要把他粘贴在git里的公钥中,submit 第四步 ssh-T git@git.oschina.net
配置了一万遍,最后发现······原来是email错写成name······
之后成功上传本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 |
参考资料
- 《深入理解计算机系统V2》学习指导
- Vim编辑器
- GDB 简明教程
- Linxu系统编程:实验2、3、4