首页 > 其他分享 >CSAPP 第三章 笔记

CSAPP 第三章 笔记

时间:2023-11-27 14:37:19浏览次数:35  
标签:CSAPP 第三章 跳转 操作数 笔记 保存 指令 内存 寄存器

历史观点

程序编码

机器级代码

  • x86-64 可见的处理器状态:
    1. 程序计数器PC:%rip,给出下一条指令的地址
    2. 寄存器文件:16个,储存64位的值
    3. 条形码寄存器:保存最近执行的算术或逻辑指令的状态信息,用来控制条件变化
    4. 向量寄存器:存放多个整数或浮点数值
  • 函数调用保存策略
    1. 调用者保存

    2. 被调用者保存

数据格式

访问信息

操作数

  1. 立即数
    • $-577, $0x1F
  2. 寄存器
  3. 内存引用
    • 最常用:

数据传送指令

  1. 两个操作数不能都指向内存位置
  2. mov指令后缀与寄存器大小匹配
  3. movq指令只能以表示为32位补码数字的立即数作为源操作数,然后把这个值符号扩展得到64位的值,放到目的位置。
  4. movabsq指令能够以任意64位立即数值作为源操作数,并且只能以寄存器作为目的。
  5. 任何位寄存器生成32位值的指令都会把该寄存器的高位部分置为0
  6. 两操作数大小不一
    1. \(movz\)指令:零扩展
      • 最后两个字符为大小指示符
    2. \(movs\)指令:符号扩展
      • 最后两个字符为大小指示符
      • \(cltq\) 等效于 \(movslq \quad\%eax,\%rax\)

压入和弹出栈数据

  • pushq %rbp
  • popq %rax

算术和逻辑操作

加载有效地址leaq

  1. 有效地址计算方式与内存地址计算方式一致

  2. 可以做简单的加法与乘法运算

一元操作(第二组)

一个操作数:寄存器或内存位置

二元操作(第三组)

  • 第一个数:源操作数
    立即数,寄存器或内存位置
  • 第二个数:目的操作数
    寄存器或内存位置

移位操作(第四组)

  • 移位量
    • 立即数,或寄存器cl
    • 移位量由cl低\(m\)位决定,其中\(2^m = w\),\(w\)为数据值位长

特殊的算数操作

控制

条件码

  • 条件码的设置
    • 下图中操作都会设置条件码
    • cmptest指令
      • suband类似
      • 不改变寄存器的值
  • 条件码的使用
    1. SET指令根据条件码的某种组合,将一个字节设置为0或者1。
    2. jump指令可以条件跳转到程序的某个其他的部分。
      • 编码
        1. PC相对寻址

          其中第二行:0x8 = 0x5(下一行地址) + 03(跳转指令的目标编码)
          同理 第五行:0x5 = 0xd + f8
    3. 可以有条件地传送数据。
      • 基于条件传送的代码比基于跳转指令的代码效率高
        预测:错误则浪费时间

循环

用条件测试和跳转组合起来实现循环的效果。

  • for, do-while, while
  • switch

    跳转表为数组,重复的情况使用相同标号,缺少的情况使用默认值

过程

传递控制,传递数据,分配和释放内存

运行时栈

  • 栈帧,通过栈指针%rsp维护

转移控制

数据传送

  • 寄存器(6个)

    • 传递参数时,所有数据大小都向8的倍数对齐

栈上的局部存储


局部变量不需要对齐

寄存器中的局部存储空间

  • 统一的使用惯例
    • 调用者保存寄存器
    • 被调用者保存寄存器
  • 栈保存寄存器数值
    入栈保存,出栈恢复

递归过程

数组分配与访问

  • 基本原则
    • 地址计算
  • 指针运算
  • 定长数组,变长数组

异质的数据结构

  • 结构
    • 对齐(插入间隙)
  • 联合
    • 共用空间

控制与数据结合

  • 指针
  • 缓冲区溢出
    • C对数组引用不进行边界检查:破坏栈中状态信息(gets函数)
    • 防御
      • 栈随机化
      • 栈破坏检测(金丝雀值)
      • 限制可执行代码区域
  • 变长栈帧

标签:CSAPP,第三章,跳转,操作数,笔记,保存,指令,内存,寄存器
From: https://www.cnblogs.com/dddon/p/17832635.html

相关文章

  • Linux系统 基本权限UGO读书笔记
    1.高级权限 高级权限:suidsgidstickysuid:普通用户登陆对于有些文件没有查看权限或者某些命令没有执行命令,例如普通用户不能查看root用户家目录下内容,也不能用passwd对其他文件进行修改,使用suid可以针对单个命令对于普通用户提权限。suid命令格式:chmodu+s命令作用:单独提高一......
  • 解析几何笔记:向量的外积
    目录向量的外积定义几何意义外积的运算规律计算向量的外积外积的坐标计算外积的坐标表示向量的混合积定义几何意义常用性质计算向量的混合积混合积的坐标计算三向量(或四点)共面条件参考向量的外积定义定义12个向量\(\bm{a},\bm{b}\)的外积(记作\(\bm{a}\times\bm{b}\))仍然是一......
  • opencv笔记 - 获取图像属性
    学习链接:https://www.bilibili.com/video/BV1De411R77P/?p=6&vd_source=441ed12ec48d03afe294e7c5f663a0d3获取图像属性主要介绍三个属性:形状属性:行、列、通道数像素数目属性图像的数据类型属性形状属性shapeshape可以获取图像的形状,返回包含行数,列数,通道数的元组.灰度图像:返回行数......
  • C语言笔记7
    数组是一组有序的、类型相同的数据的集合,这些数据被称为数据的元素。一维数组的定义类型说明符数组名【正整型常量表达式】说明:类型说明符:数组的类型。数组名同变量名命名规则相同。常量表达式指明数组中元素个数,必须大于0.可以是数值常量、符号常量和字符常量。例如:floa......
  • 随机过程笔记
    1,相关:两个变量完全没关系,叫独立,如果关系越来越大,相关程度就越来越高,所以相关是研究两个变量之间的互相影响程度,用E(XY)衡量,算出的值大说明相关程度高,值小说明相关程度低。2,相关函数:在随机过程领域,样本随时间变化,我们要研究的就是两个时间点的样本有多相关。比如今天的股票收盘价......
  • 学习笔记11
    TCP/IP和网络编程TCP/IP协议TCP/IP是互联网的基础,TCP代表传输控制协议,IP代表互联网协议。TCP/IP的四层结构:应用层:向用户提供应用程序,如电子邮件、文件传输访问、远程登录等 sshping传输层提供应用程序间的通信,格式化信息流,提供可靠传输: TCPUDP网络层:进行网络连接的建立......
  • 学习笔记11
    第十三章TCP/IP和网络编程一、知识点归纳(一)网络编程简介如今,上网已成为日常生活的需要。虽然大多数人可能只把互联网作为一种信息收集、网上购物和社交媒体等的工具,但计算机科学的学生必须对互联网技术有一定的了解,并掌握一定的网络编程的技能。在本章中,我们将介绍TCP/IP网络......
  • 前端学习笔记202307学习笔记第六十八天-前端面试-flex实现圣杯布局2
       ......
  • 学习笔记11 第十三章学习总结
    第13章TCP/IP和网络编程TCP/IP协议TCP/IP协议是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP协议。他们与TCP或IP的关系紧密,是互联网必不可少的组成部分。TCP/IP一词泛指这些协议,因此,有时也......
  • WGCLOUD 基础详解 常用命令笔记
    WGCLOUD在v3.4.9版本新增了一个模块【常用命令笔记】这个模块非常有用,对我的工作非常有帮助,可以把我常用的一些命令或文档记录下来,也可以当作记事本使用,记录一些笔记使用简单,而且方便......