zoukankan      html  css  js  c++  java
  • 信息安全系统设计基础期中总结

     计划学习时间:210分钟     实际学习时间:230分钟。

    一、查找或帮助命令

    man -k:             man 3 printf

    1.Linux 2.系统调用 3.c语言

    grep -nr                查找某个宏 grep -nr XXX /usr/include(XXX为宏)

    n:为显示行号
    r:为递归查找
      

    二、工具

    vim

    大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
    :set nu 显示行号
    :set ai 自动缩行
    :set ts=4 设置一个 TAB 键等于几个空格
    [[ 转到上一个位于第一列的"{"
    ]] 转到下一个位于第一列的"{"
    { 转到上一个空行
    } 转到下一个空行
    gd 转到当前光标所指的局部变量的定义

     

    Make和Makefile自动化编译

    Makefile一般写法:

    一个Makefile文件主要含有一系列的规则,每条规则包含以下内容:

    • 需要由make工具创建的目标体,通常是可执行文件和目标文件,也可以是要执行的动作,如‘clean’;

    • 要创建的目标体所依赖的文件,通常是编译目标文件所需要的其他文件。

    • 创建每个目标体时需要运行的命令,这一行必须以制表符TAB开头

    格式为:

    test(目标文件): prog.o code.o(依赖文件列表)
    tab(至少一个tab的位置) gcc prog.o code.o -o test(命令) 
    .......
    即:
    target: dependency_files
    	command

     

    三、正则表达式

    作用:

    • 验证是否匹配
    • 查找
    • 替换

    规则:

    • 特殊符号,表示后面的字符本身
    • [ ] 匹配其中任意字符,但每次匹配只匹配一个
    • [^ ] 匹配除其中的任意字符,每次匹配只匹配一个
    • {n} 次数修饰,重复n次,具体如下:

      ?= {0,1}
      += {1, }	
      *= {0, }
      {m,n}:至少为m,至多为n

      匹配方法:

        • ^ 从字符串开始的地方匹配
        • $ 从字符串结束的地方匹配
        • | 可以匹配左或者右
        • () 1.次数修饰中,可以表示当做整体;2.结果中,可以表示单独表示

     

    四、静态库与动态库

     

    静态库

    创建该库:

    gcc -c addvec.c multvec.c
    ar rcs libvector.a addvec.o multvec.o

    参数:

    ar -r:在库中插入模块(替换)
       -c:创建一个库
       -s:写入一个目录文件索引到库中
    	即:把两个.o文件归档成静态库存档文件.a并且写入目录文件索引到库中

    创建它的可执行文件

    gcc -02 -c main2.c
    gcc -static -o p2 main2.o ./libvector.a

    相关参数含义:

    gcc -02 和-0都是代码优化指令,可以减少编译时间
    	-c 只编译,不连接成为可执行文件
    	-static 告诉编译器驱动程序,链接器应该构建一个完全链接的可执行目标文件
    	-o 命名生成文件

    动态库(linux)

    构造创建共享库:

    gcc -shared -fPIC -o libvector.so addvec.c multvec.c

    参数解析:

    -fPIC	    指示编译器生成与位置无关的代码
    -shared     指示链接器创建一个共享的目标文件
    -o 	    命名生成文件

    链接程序

    gcc -o p2 main2.c ./libvector.so

     创建一个可执行目标文件p2,在运行时可以和动态库libverctor.so链接。

    五、课本

    1.第一章:计算机系统漫游

    (1)信息=位+上下文

    系统中所有信息的都是由一串位表示的,区分不同数据对象的唯一方法是它的上下文。

    (2)冯式结构

    CPU执行指令的操作:加载、存储、操作、跳转

    (3)存储系统核心思想———缓存

    (4)操作系统核心抽象

    文件、虚存、进程、虚拟机

    (5)查看源文件用od 命令 : od -tc -tx1 hello.c

    2.链接

    (1)链接器的两个任务

    - 符号解析
    - 重定位

    (2)目标文件的三种形式

    - 可重定位目标文件
    - 可执行目标文件
    - 共享目标文件

    (3)目标文件格式

    - a.out		可执行文件
    - COFF		一般目标文件格式
    - PE			可移植可执行文件格式
    - ELF		可执行可连接文件格式

    (4)readelf命令

    用于显示一个/多个elf格式目标文件的信息

    (5)全局符号

    - 强符号:函数和已经初始化的全局变量
    - 弱符号:未初始化的全局变量
    • 规则:

      - 不允许有多个强符号
      - 若有一个强符号和多个弱符号,选强符号
      - 若有多个弱符号,任选一个

    (6)处理目标文件的工具

    - AR			创建静态库,插入、删除、列出和提取成员
    - STRINGS		列出一个目标文件中所有可打印的字符串
    - STRIP			从目标文件中删除符号表中定义的符号
    - NM			列出一个目标文件中节的名字和大小
    - READELF		显示一个目标文件的完整结构
    - OBJDUMP		二进制工具之母,可以显示一个目标文件中所有的信息

    3.信息的表示和处理

    (1)三种数字

            无符号数、有符号数(2进制补码)、浮点数
      • 补码是利用寄存器的长度是固定的特性简化数学运算,只要一个加法器就可以实现所有的数学运算。
      • 进制转换:拿二进制作中间结果

    (2)信息存储

      • gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码

      • 字节顺序是网络编程的基础

        - 小端是“高对高、低对低”
        - 大端是“高对低、低对高”
      • 逻辑运算(结果是1或0)和位运算(结果是位向量)

        只要一个与非门,就可以完成所有的逻辑运算。
      • 掩码是位运算的重要应用,对特定位可以置一,可以清零

    (3)整数表示与运算

      • C语言中有符号数和无符号数的转换规则,位向量不变——信息就是位+上下文。

      • 0扩展和符号扩展

        零扩展:要将一个无符号数转换为一个更大的数据类型,只需简单的最高位前加0。
        符号扩展:将一个补码数字转换为一个更大的数据类型,在表示中添加最高有效位值的副本。

    (4)浮点数——IEEE浮点表示

      • IEEE浮点标准用V = (-1)^s × M × 2^E的形式来表示一个数

        - 符号:s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释作为特殊情况处理。
        - 尾数:M是一个二进制小数,它的范围是1~2-ε,或者是0~1-。
        - 阶码:E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。

    4.程序的机器级表示

    (1)寻址方式三代

    DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
    8086的分段模式
    IA32的带保护模式的平坦模式

    (2)ISA指令集体系结构

      • 机器级程序的格式和行为,它定义了处理器状态、指令的格式以及每条指令对状态的影响。

         

    (3)编译过程:

    -
    - 用objdump -d xxx.o -o xxx.s 反汇编

    (4)算术和逻辑操作

      • 加载有效地址

        leal,从存储器读数据到寄存器,而从存储器引用的过程实际上是将有效地址写入到目的操作数。目的操作数必须是一个寄存器。
      • 一元操作和二元操作

        一元操作:只有一个操作数,既是源又是目的,可以是一个寄存器或者存储器。
        二元操作:第二个操作数既是源又是目的,两个操作数不能同时是存储器。

          (5)栈帧

      • 栈帧结构

        - 为单个过程分配的栈叫做栈帧,寄存器%ebp为帧指针,而寄存器指针%esp为栈指针,程序执行时栈指针移动,大多数信息的访问都是相对于帧指针。
        - 栈向低地址方向增长,而栈指针%esp指向栈顶元素。
      • 转移控制

        - call:目标是指明被调用过程起始的指令地址,效果是将返回地址入栈,并跳转到被调用过程的起始处。
        - ret:从栈中弹出地址,并跳转到这个位置。
        - 函数返回值存在%eax中

    5.处理器体系结构

    (1)Y86指令集体系结构

      • 程序员可见的状态(Y86程序中的每条指令都会读取或修改处理器状态的某些部分)

        - 8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。
        - 条件码:ZF(零)、SF(符号)、OF(有符号溢出)
        - 程序计数器(PC):存放当前正在执行的指令的地址
        - 存储器:很大的字节数组,保存着程序和数据。Y86系统用虚拟地址来引用存储器的位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或者物理地址。
        - 状态码(stat):表明程序执行的总体状态。(异常处理)
      • 指令编码规则

        高4位为代码部分,低四位为功能部分
      • Y86异常(状态码:描述程序执行的总体状态。)

        值		名字		含义
        1		AOK		正常操作
        2		HLT		处理器执行halt指令(指令停止)
        3		ADR		遇到非法地址
        4		INS		遇到非法指令

     

    (2)逻辑设计和硬件控制语言HCL

      • 实现一个数字系统需要的三个组成部分

        - 计算对位进行操作的函数的组合逻辑
        - 存储位的存储器元素
        - 控制存储器元素更新的时钟信号

     

    6.存储器层次结构

    (1)三种常见存储技术:RAM/ROM/磁盘

    • 随机访问存储器(RAM)

      静态RAM(SRAM)
      动态RAM(DRAM)
    • 非易失性存储器(ROM)

      • 可编程ROM(PROM):只能被编程一次。PROM每个存储单元有一种熔丝,只能用高电流熔断一次。
      • 可擦写可编程ROM(EPROM):紫外线光照射过窗口,EPROM就被清除为0,被擦除和重编程的次数为1000次。
      • 电子可擦除ROM(EEPROM):不需要一个物理上独立的编程设备,因此可以直接在印制电路卡上编程,能够编程的次数为10^5。
      • 闪存:基于EEPROM,为大量的电子设备提供快速而持久的非易失性存储。
    • 磁盘

      - 磁盘结构:盘片、磁道、扇区、间隙、柱面
      - 磁盘容量:记录密度、磁道密度、面密度
      - 访问时间:寻道时间+旋转时间+传送时间
      - 访问磁盘:CPU使用一种称为存储器映射I/O的技术向I/O设备发出命令,地址空间中为I/O设备通信保留的地址称为I/O端口。
    • 逻辑磁盘块
    • 数据总线、控制总线、地址总线
    • 系统总线、存储总线、I/O总线
    • 读写事务:读事务,从主存传数据到CPU;写事务,从CPU传数据到主存。

     

    (2)局部性

    • 对程序数据引用的局部性

    • 取指令的局部性

    (3)存储器层次结构

    • 中心思想:每层存储设备都是下一层的“缓存”

    • 不命中率:不命中数量/引用数量
    • 命中率:1-不命中率

    • 高速缓存存储器结构

      • 高速缓存的结构用元组(S,E,B,m)来描述,高速缓存的大小C = S * E * B

        - s个组索引位:一个无符号整数,说明字必须存储在哪个组中。
        - t个标记位:组中的哪一行包含这个字。
        - b个块偏移位:在B个字节的数据块中的字偏移。

    参考资料:

    1.《深入理解计算机系统》

    2.博客每周测试解析

    3.小组同学提问与老师的解析

    20135202闫佳歆http://www.cnblogs.com/20135202yjx/p/4926597.html

    六、习题

    4.1  Y86中 jmp 0x100 对应的机器码是(0x7000010000)
    4.2  Y86中 0xa00f 对应的汇编语句是(pushl %eax)
    CH04 判断:Y86中,状态码INS表示遇到非法指令。(ok)
    CH04 填空:创建Y86代码唯一的工具是(汇编器 or YAS)

    4.24 填空:mem_write中为什么有IRMMOVL( 寄存器往内存写 )

     CH04 填空:Y86中对于PC值p=100,指令包括一个寄存器指示符字节和,常数1,增加器产生值(106)
     

    七、收获

           前面的自主学习,主要是针对老师的重点来学习的,并且学习的过程中,由于没有细细琢磨,只懂一些简单的概念,与简单的计算题,而更深入的题,就要看小组的提问与解析,或者自己问同学。

           这次的期末总结,在综合各个同学的博客列出的知识点,把书翻看一遍,并把自己觉得并不熟练或者觉得重要的知识点记下来。过一遍老师给的重点掌握的知识,看了一遍每周的测试解析(这次看就觉得题目很简单了),在做家庭作业的过程中,感觉才是对知识的真正运用。比如,如何在32位的机器上进行64位的运算,这就要用到第二章的知识,感觉新鲜有趣,但是有时候也会遇到挫折。

          我觉得有时候学习效率这种事,有时候是要靠逼出来的,计划自己多少个小时完成,就必须在时间段内全心去做,不要三心二意。

          对于老师的课,我觉得虽然这个学期的学习压力很大,每周都公布成绩榜,让我的头上感觉随时都横着一把利刀,不进则退。但到了这个时候,回过头想想,自己曾经那么努力过,而且学到的知识,又与别的科目相连,学习并不是赔本的生意,迟早要学的,所以,趁现在,好好学。谢谢,老师!

  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/zhengwei0712/p/4928501.html
Copyright © 2011-2022 走看看