ReStr0
Venom战队队员 Chamd5安全团队
ReStr0-Blog

寄存器名称与数据类型

引用来自:(10条消息) 寄存器名称与数据类型_WarEric的博客-CSDN博客_寄存器数据类型

寄存器

x86-64结构的CPU包含一组16个存储64位值的通用目的寄存器;历史上最开始的寄存器只有8个8位的寄存器,后来经历了16位, 32位直至现在的64位,寄存器也由8个扩展到16个。
程序可以依据每个寄存器的名称使用其中的8位,或16位,或32位,或64位;使用每个寄存器有约定的使用目的。
下面以表格的形式给出寄存器的名称与用法

https://blog.restro.cn/wp-content/uploads/2021/09/image-2.png


注:%rip是程序计数器,与这16个不同。

调用者保存是指当P函数调用Q函数时,该寄存器中的内容由调用者P负责保存,Q可以直接使用该寄存器。
被调用者保存是指当P函数调用Q函数时,该寄存器中的内容由被调用者Q负责保存,Q在使用这些寄存器前应当先把这些寄存器内的值存入栈中,Q返回之前应当将对应的值从栈中恢复到寄存器上。


数据类型


以下是64位结构上对应的数据类型。Intel用术语“字word”表示16位的数据类型;byte表示字节,long word表示32位,q表示64位

https://blog.restro.cn/wp-content/uploads/2021/09/image-1.png


cpu寻址


cpu操作数据就需要知道数据的地址,通过寻址来实现。寻址分为直接寻址和间接寻址。以下做一些解释。

操作数:

  • 立即数 $标准C表示法表示的整数
  • 寄存器 R[ra]
  • 内存引用 Mb[Addr]
    Imm(rb, ri, s): 有效地址 Imm+R[rb]+R[ri]*s; 注意两个rb,ri都必须是64位寄存器,比例因子s必须是1, 2, 4或8
https://blog.restro.cn/wp-content/uploads/2021/09/image.png


任何操作都不能直接进行内存到内存数据修改,要实现内存到内存的数据操作只能先将数据修改到寄存器,然后再通过寄存器修改到内存

发表评论

textsms
account_circle
email

ReStr0-Blog

寄存器名称与数据类型
引用来自:(10条消息) 寄存器名称与数据类型_WarEric的博客-CSDN博客_寄存器数据类型 寄存器 x86-64结构的CPU包含一组16个存储64位值的通用目的寄存器;历史上最开始的寄存器只有8个…
扫描二维码继续阅读
2021-09-25