zoukankan      html  css  js  c++  java
  • 信息安全系统设计与实现:第一、二章学习笔记

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

    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

    • [x] VirtualBox
    • [ ] Vmware

    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

  • 相关阅读:
    Hive初识(一)
    图解HTTP总结(8)——确认访问用户身份的认证
    Android 7.0 照相 FileUriExposedException
    activity跳转的一些坑
    gopath配置
    android项目中记录
    一些趣味性总结(JAVA)
    http的response遇到illegalstateexception解决办法
    django demo
    Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决方法
  • 原文地址:https://www.cnblogs.com/DKYcaiji/p/15269788.html
Copyright © 2011-2022 走看看