• 信息安全系统设计基础期中总结


     计划学习时间: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位的运算,这就要用到第二章的知识,感觉新鲜有趣,但是有时候也会遇到挫折。

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

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

  • 相关阅读:
    C#新特性
    蛋清打发奶油状
    VS 2015 开发Android底部导航条----[实例代码,多图]
    使用微软的MSBuild.exe编译VS .sln .csproj 文件
    双色球基础分析--SQL
    Windows 7 中的 God Mode
    Free Online SQL Formatter
    Windows 特殊文件夹
    常用DNS列表(电信、网通)
    C语言词法分析:C#源码
  • 原文地址:https://www.cnblogs.com/zhengwei0712/p/4928501.html
Copyright © 2020-2023  润新知