20145317 《信息安全系统设计基础》第二周学习总结
20145317 《信息安全系统设计基础》第二周学习总结
教材学习内容总结
vim
VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码。在实验楼中,只要在命令行中输入vimtutor,然后跟着教程练习就可以。
- 大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
- 几个设置
:set nu 显示行号
:set ai 自动缩行
:set ts=4 设置一个 TAB 键等于几个空格
- 移动光标
[[ 转到上一个位于第一列的"{"
]] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行
gd 转到当前光标所指的局部变量的定义
GCC
GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。
- 预处理: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
GDB
GDB最基本的命令有:
- gdb programm(启动GDB)
- b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
- run 开始运行程序
- bt 打印函数调用堆栈
- p 查看变量值
- c 从当前断点继续运行到下一个断点
- n 单步运行
- s 单步运行
- quit 退出GDB
教材第一章
- 信息就是位+上下文,系统中所有信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网上传送的数据,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件。
- Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”。
- 源文件到目标文件的转化由编译器驱动程序完成,unix> gcc -o hello hello.c 这里GCC编译器驱动程序读取源文件并把它翻译成一个可执行目标文件。翻译过程分为四个阶段:预处理、编译、汇编、链接,预处理器、编译器、汇编器、链接器一起构成编译系统。
- 系统的硬件组成:总线、I/O设备、内存、处理器
- 并发:一个同时具有多个活动的系统。并行:用并发使一个系统运行地更快,并行可以在计算机系统多个抽象层次上运用。按照系统层次结构由高到低的顺序强调三个层次:线程级并发、指令级并行、单指令多数据并行
- 计算机系统是由硬件和系统软件组成的,程序被其他程序翻译成不同的形式,开始时是ASCII文本,然后被编译器和链接器翻译成二进制可执行文件
- 处理器读取并解释存放在主存里的二进制指令
教材第七章
-
静态链接器主要任务:符号解析、重定位
-
目标文件形式:可重定位目标文件、可执行目标文件、共享目标文件
-
每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。有三种不同的符号:
①由m定义并能被其他模块引用的全局符号
②由其他模块定义并被模块m引用的全局符号
③只被模块m定义和引用的本地符号
Vim编辑器
Vim共有六种模式:
- 普通模式(Normal mode)
- 插入模式(Insert mode)
- 可视模式(Visual mode)
- 选择模式(Select mode)
- 命令行模式(Command line mode)
- Ex模式(Ex mode)
-
实验二 GCC的使用
-
编译器GCC的使用gcc 编译模块化的程序实验三 GDB使用
- gcc 支持编译的一些源文件后缀名
.c
C语言源文件.C
.cc
.cxx
C++源文件.m
Object-C源文件.i
经过预处理后的C源文件.ii
经过预处理后的C++源文件.s
.S
汇编语言源文件.h
预处理文件(头文件).o
目标文件.a
存档文件 - gcc 编译程序的流程:
.c
-->.i
-->.s
-->.o
- 预处理: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 - 用 gcc 编译一个经典 C 程序
- gcc 到底背着我们做了什么:调用预处理程序,由它负责展开在源程序中定义的宏
gcc -E hello.c -o hello.i
将hello.i编译为目标代码gcc -c hello.i -o hello.o
gcc连接器将目标文件链接为一个可执行文件,一个大致的编译流程结束gcc hello.o -o hello
-
- gcc 支持编译的一些源文件后缀名
-
GDB概述实验四 Makefile使用
- 使用gdb调试:
gcc –g gdb.c -o testgdb
启动GDBgdb testgdb
设置断点b XX
运行r
下一步n``s
跳过循环,不用单步执行until
设置临时断点tb
打印函数调用堆栈bt
查看变量值p
从当前断点继续运行到下一个断点c
条件断点b 12 if i=1500
每次执行展示display j
退出函数finish
退出GDBq
- 使用GDB:编译时加入参数
-g
gdb <program> programe
- 使用gdb调试:
-
Makefile基本写法:test(目标文件): prog.o code.o(依赖文件列表)
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
.......
-
使用宏的Makefile:定义宏
宏名=原变量
,使用宏的格式(宏名)
本周代码托管截图
https://git.oschina.net/Layna/ChessFrame.git
本周的个人思考问题
其他(感悟、思考等,可选)
这周的学习任务比上周要多一些,因为这周开始正式使用Linux里面的各种命令来写C语言的代码,其中在命令行中之后是vim的环境,所以在老师的实验楼实习里面我练了一些时间才可以在输入代码时随意的增加或者删除。但还是不是很熟练这还需要我大量的来练习才可以很好地使用vim的命令。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 24篇 | 350小时 | |
第一周 | 0/0行 | 1/2 | 20小时 | |
第二周 | 53/53行 | 1/3 | 25/45小时 |