• 2017-2018-5 0155327 《信息安全系统设计基础》第五周学习总结


    2017-2018-5 0155327 《信息安全系统设计基础》第五周学习总结

    教材学习内容总结

    程序的机器级表示

    计算机执行机器代码,用字节序列编码低级操作,包括处理数据、管理储存器、读写储存设备上的数据,以及利用网络通信。

    3.1历史观点

    Intel处理器俗称X86,经历了长期的、不断进化的发展过程。

    3.2程序编码

    编译代码:gcc =O1 -o p p1.c p2.c
    实际上gcc命令调用了一系列程序,将源代码转化成可执行代码。

    3.2.1机器级代码

    指令集体系结构ISA:定义了处理器状态、指令的格式,每条指令对状态的影响。

    3.3数据格式

    3.4访问信息

    一个IA32中央处理单元包含一组8个储存32位值的寄存器。这些寄存器用来存储整数数据和指针。

    3.4.1操作数指示符

    3.4.2数据传送指令

    将数据从一个位置复制到另一个位置的指令。

    3.4.3数据传送指令:

    MOV:movb,movw,movl分别传送字节,字,双字
    MOVZ(零扩展,高位用0填充):同上,压栈出栈见p114表格。(注意栈顶的地址值是栈中最小的)
    MOVS(符号扩展,高位用原来最高位的数值填充):同上
    C语言中,指针就是地址,间接引用指针就是将指针放在一个寄存器中,然后在存储器中使用这个寄存器。

    3.5算数和逻辑操作

    四种整数操作:
    加载有效地址:实际是将有效地址写入目的操作数,目的操作数必须是寄存器。
    一元操作:只有一个操作数,可以是寄存器也可是存储器位置。
    二元操作:源操作数是第一个,可以是立即数、寄存器、存储器 目的操作数是第二个,可以是寄存器、存储器 两个不能同时为存储器。
    移位:第一个是移位量,用单个字节编码(只允许0-31位的移位)。

    3.6控制

    控制中最核心的是跳转语句:
    有条件跳转
    无条件跳转

    3.6.5循环

    1.do-while循环
    通用形式:
    do
        body-statement
        while(test-expr);
    loop:
            body-statement
            t = test-expr;
            if(t)
                   goto loop;
    2.while循环
    通用形式:
    while (test-expr)
            body-statement
    if(!test-expr)
            goto done;
    do
                   body-statement
                   while(test-expr);
    3.for循环
    通用形式:
    for(init-expr;test-expr;update-expr)
    body-satament

    3.7过程

    过程可以理解为c中的函数,当调用者(caller)调用被调用者(be caller)的时候,系统会为被调用者在栈内分配空间,这个空间就称为栈帧。栈顶元素的地址是所有栈中元素地址中最低的
    栈用来传递参数、存储返回信息、保存寄存器,以及本地存储。
    栈帧:为单个过程分配的那部分栈称为栈帧。
    最顶端的栈帧以两个指针界定:
    寄存器%ebp-帧指针
    寄存器%esp-栈指针

    教材问题

    1.X86 寻址方式经历三代:

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

    2. 机器级编程的两种抽象

    1.ISA:定义是与程序设计有关的计算机架构的一部分,包括本地数据类型、指令、寄存器、地址模式、内存架构、中断和意外处理和外部 I/O 。一个 ISA 包括一系列 opcodes(机器语言)的一个规格,本地命令由一个特定的 CPU 设计来实现。
    2.机器级程序使用的内存地址是虚拟地址,提供的内存模型看上去是一个非常大的字节数组。

    代码示例

    汇编代码:
    gcc -Og -S xxx

    反汇编:
    objdump -d xxx

    操作数指示符

    标识方式一共有三种,一种是$符号后跟一个标准C表示的整数,比如$100,$0x11等等。第二种则是寄存器,当它作为一个操作数的时候,则是取的寄存器当中的数值。另外,对于寄存器来说,也可以选择性的操作4个、2个、1个字节,而并不一定非要操作4个字节。最后一种,则是我们相对来说最熟悉的,就是存储器或者说内存。当它作为一个操作数的时候,会去计算存储器地址的数值,然后去这个地址取相应的数值。

    代码托管

    (statistics.sh脚本的运行结果截图)

    上周考试错题总结

    • 错题1及原因,理解情况
    • 错题2及原因,理解情况
    • ...

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 其他

    本周结对学习情况

    - [结对同学学号1](博客链接)
    - 结对照片
    - 结对学习内容
        - XXXX
        - XXXX
        - ...
    

    其他(感悟、思考等,可选)

    xxx
    xxx

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 300/1300 2/9 30/90

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:XX小时

    • 实际学习时间:XX小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    JDBC基本入门-JDBC中各个接口和类详解
    Docker 安装与基本使用
    java打包和运行的方式
    使用@Valid+BindingResult进行controller参数校验
    Antd使用timePicker封装时间范围选择器(React hook版)
    antd的table组件设置Column的width列宽度不生效问题
    vector二维数组如何排序
    递归反转链表(通俗详解)
    安装pythorch出现“由于目标计算机积极拒绝,无法连接”问题
    C语言字符串
  • 原文地址:https://www.cnblogs.com/l97----/p/7712407.html
Copyright © 2020-2023  润新知