信息安全系统设计基础 第二周学习笔记
一、学习目的
1. 熟悉Linux系统下的开发环境
2. 熟悉vi的基本操作
3. 熟悉gcc编译器的基本原理
4. 熟练使用gcc编译器的常用选项
5 .熟练使用gdb调试技术
6. 熟悉makefile基本原理及语法规范
7. 掌握静态库和动态库的生成
二、vi的基本操作
由于当时做实验楼的时候,网络很卡,vim的学习是在自己电脑的虚拟机上进行的。
进入虚拟机,打开终端,输入vimtutor进行vim的学习。
首先了解vim的键盘作用:
普通模式下基本按键指令:
进入插入模式:
普通模式下的退出指令(输入':'进入命令行):
删除指令:
以下是在vimtutor中的教程:
在vim学习中使用大写U进行撤销时,没有明显的变化,而小写u就直接有撤销的效果,不知是何原因。
后来再次使用U命令时,就有撤销的效果。可能是当时操作有问题,或者当时U作用的那一行没有进行修改。
三、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
前三步,GCC的参数连起来是“ESc”,相应输入的文件的后缀是“iso”。
gcc的后缀名解释:
gcc的命令选项:
实验过程:
实验中遇到的问题:
没有创建hello.c文件就进行gcc编译,出现错误,没能找到该文件。后来创建了hello.c文件后,问题便迎刃而解了。
三、gdb的运用
在命令行中输入gdb [文件名],就可以通过一下指令运行程序了。
- gdb programm(启动GDB)
- b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
- run 开始运行程序
- bt 打印函数调用堆栈
- p 查看变量值
- c 从当前断点继续运行到下一个断点
- n 单步运行
- s 单步运行
- quit 退出GDB
- display 跟踪变量值的改变
- until 跳出循环
- finish 跳出函数
- help 帮助
五、make
准备知识:编译,链接,静态库,共享库
编译:把高级语言所书写的代码转换成机器可识别的指令,此时还不能够被执行,编译器通过检查高级语言的语法,函数和变量的声明是否正确!如果正确则产生中间目标文件(目标文件在Liunx中默认后缀为“.o”)
链接:将多.o 文件,或者.o 文件和库文件链接成为可被操作系统执行的可执行程序
静态库:又称为文档文件(Archive File) 。它是多个.o文件的集合。Linux中静态库文件的后缀为“.a”
共享库:也是多个.o 文件的集合,但是这些.o 文件时有编译器按照一种特殊的方式生成(共享库已经具备了可执行条件)
在执行 make 之前,需要一个命名为 Makefile 的特殊文件(本文的后续将使用Makefile 作为这个特殊文件的文件名)来告诉 make 需要做什么(完成什么任务),该怎么做。
当使用make 工具进行编译时,工程中以下几种文件在执行make 时将会被编译(重新编译):
1.所有的源文件没有被编译过,则对各个 C 源文件进行编译并进行链接,生成最后的可执行程序;
2.每一个在上次执行 make 之后修改过的 C 源代码文件在本次执行make 时将会被重新编译;
3.头文件在上一次执行make 之后被修改。则所有包含此头文件的 C 源文件在本次执make 时将会被重新编译。
make的问题:对于静态库和动态库的知识还未能消化,希望能通过以后的实际操作来掌握,也希望老师在课堂上能着重讲讲这些知识。