CMU 15213笔记 第三章

machine language(csapp-3.1~3.5)

  • 基本操作
    • operand src dest
    • 地址表示模式
      这里写图片描述

control(csapp-3.6)

  • 条件码
    这里写图片描述
    这里写图片描述
  • testq %rax,%rax 可以检测%rax正负
  • 左侧为控制条件转移, 右侧为数据条件转移
    这里写图片描述
    • 数据条件转移适合于内部计算不复杂的情况,并且可能带来副作用
    • 好处:
      这里写图片描述
  • while循环编译成汇编时,会变成两种goto形式

    • 第一种:jump to middle
      这里写图片描述

    • 第二种: guarded-do
      这里写图片描述

  • for循环也会改成while形式在改成goto形式
    • init有时可省去
      这里写图片描述
  • switch编译时会使用jump table结构
    • 无须使用if-else结构
    • 跳转所花费时间与开关数量无关

* procedure(csapp-3.7)*

  • call指令
    • 把call代码下一行的地址A压如栈中
    • 将PC设为被调用函数的起始位置
  • ret指令
    • 从栈中弹出地址A
    • 将PC设为A
  • 调用函数时参数的前六个保存在寄存器中,后边的保存在调用函数的栈帧中
    • 参数从底下往上保存
      这里写图片描述

data(csapp-3.8~3.9)

  • 二维数组访问

  • 对齐

    • 任何K字节的基本对象的地址必须为K的倍数
    • 在写结构内部的对象时,应该依照从大到小的顺序声明,这样可以减少结构大小
      这里写图片描述

overflow(csapp-3.10~3.11)

  • 防止栈溢出攻击的三种方法
    • 随机化栈的坐标
    • 部分区域不可读
    • 设置一段防护区域,如果被改变,则报告栈溢出

猜你喜欢

转载自blog.csdn.net/winter_wu_1998/article/details/79479794