zoukankan      html  css  js  c++  java
  • 2019-2020-1 20175314 《信息安全系统设计基础》第3周学习总结

    2019-2020-1 20175314 《信息安全系统设计基础》第3周学习总结

    教材学习内容总结

    • 程序的机器级表示

    • 汇编代码后缀:

    c 语言 数据类型 汇编代码后缀 大小(字节为单位)
    char 字节 b byte 1
    short w word 2
    int 双字 l 4
    long int 双字 l 4
    long long int 4
    char* 双字 l 4
    float 单精度 s 4
    double 双精度 l 8
    long double 扩展精度 t 10/12
    • 寄存器的理解:

    • 寻址方式:操作数(operand)指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。第一种立即数,用来表示常数值;第二种寄存器表示某个寄存器的内容。第三种内存引用,根据计算出来的地址(有效地址)访问某个内存位置。有效地址的计算方式:Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

    • 数据传送指令:

    • 算术与逻辑操作:

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

    • 在数据结构中, 栈是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
    • 在计算机系统中,栈也可以称之为栈内存是一个具有动态内存区域,存储函数内部(包括main函数)的局部变量和方法调用和函数参数值,是由系统自动分配的,一般速度较快;存储地址是连续且存在有限栈容量,会出现溢出现象程序可以将数据压入栈中,也可以将数据从栈顶弹出。压栈操作使得栈增大,而弹出操作使栈减小。
    • 栈用于维护函数调用的上下文,离开了栈函数调用就没法实现。

    栈帧(Stack Frame)

    每一次函数的调用,都会在调用栈(call stack)上维护一个独立的栈帧,每个独立的栈帧一般包括:

    • 函数的返回地址和参数
    • 临时变量: 包括函数的非静态局部变量以及编译器自动生成的其他临时变量
    • 函数调用的上下文
      栈是从高地址向低地址延伸,一个函数的栈帧用ebp 和 esp 这两个寄存器来划定范围.ebp 指向当前的栈帧的底部,esp 始终指向栈帧的顶部;
      ebp 寄存器又被称为帧指针(Frame Pointer);
      esp 寄存器又被称为栈指针(Stack Pointer);

    在函数调用的过程中,有函数的调用者(caller)和被调用的函数(callee).
    调用者需要知道被调用者函数返回值;
    被调用者需要知道传入的参数和返回的地址;

    函数调用:

    • 参数入栈: 将参数按照调用约定(C 是从右向左)依次压入系统栈中;
    • 返回地址入栈: 将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行;
    • 代码跳转: 处理器将代码区跳转到被调用函数的入口处;
    • 栈帧调整:
      1.将调用者的ebp压栈处理,保存指向栈底的ebp的地址(方便函数返回之后的现场恢复),此时esp指向新的栈顶位置; push ebp
      2.将当前栈帧切换到新栈帧(将eps值装入ebp,更新栈帧底部), 这时ebp指向栈顶,而此时栈顶就是old ebp mov ebp, esp
      3.给新栈帧分配空间 sub esp, XXX

    函数返回

    函数返回分为以下几步:

    • 保存被调用函数的返回值到 eax 寄存器中 mov eax, xxx
    • 恢复 esp 同时回收局部变量空间 mov ebp, esp
    • 将上一个栈帧底部位置恢复到 ebp pop ebp
    • 弹出当前栈顶元素,从栈中取到返回地址,并跳转到该位置 ret

    代码托管

    感想心得

    更强烈感觉到本课程对之前程序设计基础、汇编设计语言和数据结构与算法课程的需要和要求,加上Linux操作指令的学习,我会在接下来着力他们的完善知识概念体系,同时课后习题也非常重要,通过完成课后习题可以非常好地对所学知识进行学习总结。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 1/1 20/20
    第二周 300/500 1/1 10/15
    第三周 200/500 1/1 10/12
    • 计划学习时间:12小时

    • 实际学习时间:10小时

    参考资料

  • 相关阅读:
    iOS开发笔记18:一些编译、开发调试、打包的细节整理
    iOS开发笔记17:自定义相机拍照
    iOS开发笔记15:地图坐标转换那些事、block引用循环/weak–strong dance、UICollectionviewLayout及瀑布流、图层混合
    iOS开发笔记14:微博/微信登录与分享、微信/支付宝支付
    iOS开发笔记13:顶部标签式导航栏及下拉分类菜单
    iOS开发笔记12:iOS7上UITextField限制字数输入导致崩溃问题
    iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging
    iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏
    iOS开发笔记9:NSUserDefaults存储自定义实体对象
    iOS开发笔记8:Remote Notification远程消息推送处理
  • 原文地址:https://www.cnblogs.com/SANFENs/p/11655660.html
Copyright © 2011-2022 走看看