信息安全系统设计与实现:第一、二章学习笔记

信息安全系统设计与实现:第一、二章学习笔记

20191331 lyx

教材学习内容总结

第一章

本书的学习目标

通过本书的学习我们将掌握Unix/Linux的所有基本组件,包含进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和数据库。

操作系统内核

内核的定义: “内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。

所以可以将内核理解为一个操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,决定着系统的性能和稳定性。是应用程序能够在计算机系统中通过硬件执行的基础。

例:一些典型的操作系统及内核

宏内核:linux MacOS 等

微内核:华为鸿蒙系统

混合内核:win7、win10 等

一些典型的unix和linux发行版

Unix Linux
AT&T Unix Debian Linux
Berkeley Unix Ubuntu Linux
HP Unix Linux Mint
IBM Unix 基于RPM的Linux
Sun Unix Slackware Linux

通过虚拟机安装Linux

Linux内核版本

内核是系统的心脏,是linux中最基层的代码。

uname -a 或者cat /proc/version 查看内核版

Linux目录树结构

  • bin 存放二进制可执行文件(ls,cat,mkdir等)
  • boot 存放用于系统引导时使用的各种文件
  • dev 用于存放设备文件
  • etc 存放系统配置文件
  • home 存放所有用户文件的根目录
  • lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
  • mnt 系统管理员安装临时文件系统的安装点
  • opt 额外安装的可选应用程序包所放置的位置
  • proc 虚拟文件系统,存放当前内存的映射
  • root 超级用户目录
  • sbin 存放二进制可执行文件,只有root才能访问
  • tmp 用于存放各种临时文件
  • usr 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录
  • var 用于存放运行时需要改变数据的文件

Linux基本命令

  • ls:显示文件或目录信息
  • mkdir:当前目录下创建一个空目录
  • rmdir:要求目录为空
  • touch:生成一个空文件或更改文件的时间
  • cp:复制文件或目录
  • mv:移动文件或目录、文件或目录改名
  • rm:删除文件或目录
  • ln:建立链接文件
  • find:查找文件
  • file/stat:查看文件类型或文件属性信息
  • cat:查看文本文件内容
  • more:可以分页看
  • less:不仅可以分页,还可以方便地搜索,回翻等操作
  • tail -10: 查看文件的尾部的10行
  • head -20:查看文件的头部20行
  • echo:把内容重定向到指定的文件中 ,有则打开,无则创建
  • 管道命令 | :将前面的结果给后面的命令,例如:ls -la | wc,将ls的结果加油wc命令来统计字数
  • 重定向 > 是覆盖模式,>> 是追加模式,例如:echo "Java3y,zhen de hen xihuan ni" > qingshu.txt把左边的输出放到右边的文件里去

第二章

大致内容

主要介绍几类文本编辑器如:Vim、emacs、gidit等,GCC是编译器,静态和动态链接,GDB调试工具,文件系统操作,以及一些数据结构。

Vim的使用方法

最常用的几条指令

  • dd 删除整行
  • 2dd 向下删除2行,以此类推
  • yy 复制游标所在的整行
  • 3yy 向下复制3行,以此类推
  • p 粘贴至光标后
  • u(n) 撤销一次或n次操作
  • U(大写) 撤销当前行的所有修改
  • i 在当前光标处进行编辑
  • :q! 强制退出vim,不保存
  • :q 退出vim
  • :wq! 强制保存并退出vim
  • :w <文件路径> 另存为

插入图片 Vim 键位

vim学习网站 : https://www.lanqiao.cn/courses/2

上课时老师建议在编程时 开三个CMD

  • 一个用来使用编辑器编写程序
  • 一个用来编译
  • 一个用来调试

^+ALR+T 打开CMD

^+SHift+T 新建CMD

ALT + n 切换标签页

GCC编辑器及使用方法

graph LR hello.c-->hello.i: 预处理 hello.i-->hello.s: 编译 hello.s-->hello.o: 汇编 hello.o-->hello(a.out): 链接

插入图片

(1) 预处理gcc -E test.c -o test.i , C 编译器对各种预处理命令进行处理,包括头文件包含、宏定义的扩展、条件编译的选择等;

(2) 编译gcc -S test.i -o test.s ,将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件;

(3) 汇编gcc -c test.s -o test.o ,将汇编代码翻译成了机器码,但是还不可以运行;

(4) 链接gcc test.o -o test ,处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中的合适信息。

链接库&项目管理

链接可分为动态链接和静态链接:

  • 动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态库才能运行。动态链接生成的程序小巧,但是必须依赖动态库,否则无法执行。

  • Linux 下的动态链接库实际是共享目标文件(shared object),一般是.so文件,作用类似于 Windows 下的.dll 文件。

  • 静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,不过体积较大。

  • Linux 下静态库是汇编产生的.o 文件的集合,一般以.a 文件形式出现。

gcc 默认是动态链接,加上-static 参数则采用静态链接。

一个完整的项目将包含:

  1. 头文件: /include
  2. 源文件: /src
  3. 静态库: /lib
  4. 可执行文件: /bin
  5. 说明文档: /doc

使用默认源码编译:gcc -Iinclude -c src/hello.c -o libs/hello.o

使用默认静态库编译:gcc src/testhello.c libs/hello.o -Iinclude -o bin/hw1

使用指定静态库编译:gcc src/testhello.c -Iinclude -Llibs -lhello -o bin/hw2

产生静态库:ar rcs libhello.a xx.o yy.o

产生动态库:gcc src/hello.c -Iinclude -fPIC -o libs/hello.o

makefile

makefile用来管理和编译项目。makefile是一个文件,在使用make命令时,会读取这个文件并对项目按照文件内容进行编译。

make文件由一系列目标项、依赖项、规则组成。

  • 当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项

makefile就相当于visual studio中的项目管理器,它会帮助你在更新了项目中部分源代码时,自动将整个项目进行编译,以减少人工项目管理的开支。

GDB调试工具

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。

它主要能帮助我们

  • 让程序在所指定的调置的断点处停住。
  • 当程序被停住时,可以检查此时你的程序中所发生的事。
  • 动态的改变你程序的执行环境。
  • 自定义的调试参数,观察程序的运行。

gdb工具常见调试指令

  • list(l) 显示当前行之后的10行代码(list后面可接行号和函数名,回车继续向下显示)
  • 回车 直接回车,重复上一次执行的命令
  • start(s) 开始执行程序,并停在main函数的第一条语句处
  • next(n) 执行下一条语句
  • step(s) 进入正要执行的函数内部
  • print(p) 打印变量的值
  • break(b) 查看断点
  • info breakpoints(i b) 删除编号为n的断点
  • delete breakpoints(d) n 使编号为n的断点失效
  • disable breakpoints n 使编号为n的断点生效
  • enable breakpoints n 设置断点 (行号 || 函数名)
  • run(r) 连续执行程序,直到遇到断点
  • continue(c) 继续执行程序,直到遇到下一个断点
  • finish 跳出当前函数,执行其调用函数
  • jump(j) n 强制跳转到第n行,若后面没有断点则执行到程序结束
  • print(p) var 打印变量var的值,打印地址
  • print *a@n (a是数组名,n是要显示的元素个数), 显示数组a的n个元素
  • set var a=5 (set var)命令用于修改变量(a)的值
  • display var 程序每执行一步都会打印var变量的值
  • undisplay n 取消编号为n的打印
  • info locals 列出当前函数的局部变量信息
  • whatis var 显示变量var的类型
  • ptype var 显示变量var更详细的类型
  • quit(q) 退出gdb调试

C语言中的一些数据结构

  • 结构体和指针
  • 链表
  • 二叉树
  • 各种数据结构下的增删改查操作

实践内容

vscode 安装markdown插件 及 实用markdown语法

链接:https://www.cnblogs.com/DKYcaiji/p/15267782.html

OpenEuler 操作系统的安装

链接:https://www.cnblogs.com/DKYcaiji/p/15268065.html

OpenEuler 操作系统 安装 银河麒麟GUI界面

链接:https://www.cnblogs.com/DKYcaiji/p/15268176.html

基于VitralBox 的 OpenEuler系统 安装增强功能

链接:https://www.cnblogs.com/DKYcaiji/p/15268507.html

虚拟机中 OpenEuler等操作系统安装浏览器 及 登录校园网

链接:https://www.cnblogs.com/DKYcaiji/p/15269304.html

编程项目管理实践

使用vim编写简单程序

进行项目管理

安装GBD调试工具

对hello.c进行调试

一些小问题

校园网环境下 OpenEuler 系统 yum 出错


更换网络环境后问题解决
我认为可能跟校园网网关进行包过滤有关。





20191331lyx
2021/9/14

posted @ 2021-09-14 21:48  20191331liyu  阅读(177)  评论(0编辑  收藏  举报