zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155304 《信息安全系统设计基础》第五周学习总结

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

    教材学习内容总结

    机器级代码

    • ISA指令集体系结构,机器级程序的格式和行为,它定义了处理器状态、指令的格式以及每条指令对状态的影响。
    • 机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字节数组。
    • 操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器存储器中的物理地址。
    • 用objdump -d xxx.o -o xxx.s 反汇编
      image

    Ltme

    1.三种操作数:

    • 立即数:常数值。表示为$c标准表示的整数。
    • 寄存器:表示某个寄存器的内容。
    • 存储器:根据计算出来的地址访问某个存储器位置

    2.数据传送指令

    栈的特点

    a、 遵循“后进先出”的原则b、 push压栈,pop出栈c、 栈顶:总是从这端插入和删除元素d、 栈顶元素的地址是最低的e、 栈指针%esp保存着栈顶元素的地址

    3.数据传送示例

    局部变量通常保存在寄存器中;寄存器访问比存储器访问要快的多。

    过程

    1. 栈帧结构

    机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。 最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。

    2.转移控制

    • call指令

    call指令有一个目标,即指明被调用过程起始的指令地址。 call指令的效果是将返回地址入栈。并跳转到被调用过程的起始处。

    • ret指令

    ret指从栈中弹出地址,并跳转到这个位置。ret指令返回到call指令后的那条指令。

    • leave指令

    leave指令可以使栈做好返回的准备 等价于:
    movl %ebp,%esp popl %ebp

    3.寄存器使用惯例

    程序寄存器组是唯一能被所有过程共享的资源。惯例是为了防止一个过程P调用另一个过程Q时寄存器中的值被覆盖

    保存某值的两种方式

    ①由调用者保存。在调用之前就压进栈。

    ②由被调用者保存,在刚被调用的时候就压进栈,并在返回之前恢复。

    教材学习中的问题和解决过程

    练习题3.34:根据GCC产生的汇编代码,填写补充C源代码:

    int rfun(unsigned x){
    if (x==0)
        return 0;
    unsigned nx = x>>1;
    int rv = rfun(nx);
    return (x&0x1)+rv;
    }
    

    代码调试中的问题和解决过程

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 47/100 1/1 10/10
    第二周 180/200 1/1 10/10
    第三周 200/300 1/1 10/10
    第五周 190/300 1/1 10/10

    参考资料

  • 相关阅读:
    leetcode74
    leetcode59
    leetcode1283
    0079. Word Search (M)
    0067. Add Binary (E)
    0203. Remove Linked List Elements (E)
    用async 解放你的大脑
    Python 类属性和方法
    Python 类装饰器
    Python 装饰器
  • 原文地址:https://www.cnblogs.com/tyn5304/p/7709732.html
Copyright © 2011-2022 走看看