Arch64 寄存器

1.通用寄存器

AArch64支持31个64位的通用寄存器即X0-X30。其中传递参数用X0-X7寄存器,X29为栈帧寄存器FP,X30为链接寄存器LR。可以是用X来表示64位数据,用W来表示低32位数据。
在这里插入图片描述

分类描述
X0-X7用于参数传递
X9-X15在汇编代码中x9-x15出现的频率极低, 在子函数中使用这些寄存器时,直接使用即可, 无需save/restore.
X19-X29在callee子函数中使用这些寄存器时,需要先save这些寄存器,在退出子函数时再resotre
X8用于返回结果
X16、X17进程内临时寄存器
X18resrved for ABI -linux中用来存shadow_call_stack
X29FP(frame pointer register)
X30LR:链接寄存器(LR)

2.PSTATE寄存器

AArch64体系结构使用PSTATE寄存器表示当前处理器状态。

分类字段名称描述
The Condition flagsNNegative Condition flag如果指令的结果被视为一个2的补码有符号整数,则PE将其设置为:结果为负数,则为1。结果为正或为零,则为0。
The Condition flagsZZero Condition flag如果指令的结果为零,则为1,否则为0。
The Condition flagsCCarry Condition flag如果指令导致进位条件,例如作为加法结果的无符号溢出则为1,否则为0
The Condition flagsVOverflow Condition flag如果指令导致溢出条件,例如作为加法结果的有符号溢出则为1,否则为0。
The Execution state controlsSSSoftware Step bit调试器可以使用它来生成PE单步指令。例如,通过使用软件步骤,在较高异常级别执行的调试器软件可以在较低异常级别执行单步指令。 当它将MDSCR_EL1.SS设置为1时,该状态将禁用调试异常。
The Execution state controlsILIllegal Execution state bit当PSTATE.IL位的值为1时,任何执行任何指令的尝试都会导致“非法执行”状态异常。
The Execution state controlsnRWCurrent Execution state当当前执行状态为AArch64时,此位为0
The Execution state controlsELCurrent Exception level在重置为AArch64状态时,此字段保存实现的最高异常级别的编码。
The Execution state controlsSPStack pointer register selection bit在复位或AArch64状态异常时,此位被设置为1,意味着SP_ELx被选择。
The exception masking bitsDDebug exception mask bit0:未屏蔽异常 1:异常被屏蔽
The exception masking bitsASError interrupt mask bit0:未屏蔽异常 1:异常被屏蔽
The exception masking bitsIIRQ interrupt mask bit0:未屏蔽异常 1:异常被屏蔽
The exception masking bitsFFIQ interrupt mask bit0:未屏蔽异常 1:异常被屏蔽
Access control bitsPANPrivileged Access Never (PAN) state bit当实现ARMv8.1-PAN时:PAN寄存器表示PASTATE寄存器中的PAN字段。当内核态拥有访问用户态内存或者执行用户态程序的能力时,攻击者就可以利用漏洞攻击用户态。 0:表示在内核态可以访问用户态内存。 1:表示在内核态访问用户态内存会触发一个权限异常。
Access control bitsUAOUser Access Override (UAO) bit该寄存器表示PSTATE寄存器中的UAO字段,UAO为1表示EL1和EL2执行非特权指令(例如LDTR,STTR) 的效果与特权指令(例如LDR,STR)是一样的。
Timing control bitsDITData Independent Timing (DIT) bit当实现ARMv8.4-DIT时使能,为数据处理指令提供了独立的定时功能

3.特殊寄存器

ARMv8体系结构除了支持31个通用寄存器之外,还提供多个特殊寄存器。
在这里插入图片描述

3.1 零寄存器

ARMv8体系结构提供两个零寄存器,WZR是32为零寄存器,XZR是64位零寄存器。

3.2 PC指针寄存器

PC指针寄存器通常用来指向当前运行的指令的下一条指令的地址,用于控制程序中指令的运行顺序,但是编程人员不能通过指令来直接访问它。

3.3 SP寄存器

ARMv8体系结构支持4个异常等级,每个异常等级都有一个专门的Sp寄存器SP_ELn.
SP_EL0:EL0下的SP寄存器。
SP_EL1:EL1下的SP寄存器。
SP_EL2:EL2下的SP寄存器。
SP_EL3:EL3下的SP寄存器。

3.4 备份程序状态寄存器

当我们运行一个异常处理程序时,处理器的PSTATE寄存器保存到备份状态寄存器SPSR。异常处理完成的时候,在把SPSR的值恢复到PSTATE寄存器。详情见第4节SPSR_EL1。

3.5 ELR寄存器

ELR存放了异常返回的地址。
3.6 CurrentEL
该寄存器表示PSTATE寄存器的EL字段,其中保存了当前的异常等级。
0:表示EL0
1:表示EL1
2:表示EL2
3:表示EL3

3.7 DAIF

该寄存器表示PSTATE寄存器中的{D,A,I,F}字段。

3.8 SPSei

该寄存器表示PSTATE寄存器中的SP字段,用于在SP_EL0和SP_ELn中选择SP寄存器。

3.9 PAN

PAN寄存器表示PASTATE寄存器中的PAN字段。当内核态拥有访问用户态内存或者执行用户态程序的能力时,攻击者就可以利用漏洞攻击用户态。
PAN寄存器的值如下:
0:表示在内核态可以访问用户态内存。
1:表示在内核态访问用户态内存会触发一个权限异常。

3.10 UAO

该寄存器表示PSTATE寄存器中的UAO字段,UAO为1表示EL1和EL2执行非特权指令(例如LDTR,STTR) 的效果与特权指令(例如LDR,STR)是一样的。

3.11 NZCV

该寄存器表示PSTATE寄存器中的{N,Z,C,V}字段。

4 SPSR_EL1(Saved Program Status Register)寄存器

当ELx发生异常时,保持已保存的进程状态(pstate寄存器)。当从AArch64状态获取异常时:
在这里插入图片描述

字段描述
N, bit [31]在对EL1执行异常时设置为N条件标志的值,在EL1中执行异常返回操作时复制为N条件标记。
Z, bit [30]在对EL1执行异常时设置为Z条件标志的值,并在EL1中执行异常返回操作时复制到Z条件标志。
C, bit [29]在对EL1执行异常时设置为C条件标志的值,并在EL1中执行异常返回操作时复制到C条件标志。
V, bit [28]在对EL1执行异常时设置为V条件标志的值,并在EL1中执行异常返回操作时复制到V条件标志。
DIT, bit [24]当实现ARMv8.4-DIT时:数据独立计时。在EL1中执行异常返回操作时,此位被设置为PSTATE.DIT的值,并被复制到PSTATE.DIT。
UAO, bit [23]当实现ARMv8.4-DIT时:数据独立计时。在EL1发生异常时,该位被设置为PSTATE.DIT的值,并在EL1中执行异常返回操作时复制到PSTATE.DIT。
PAN, bit [22]当实现ARMv8.1-PAN时:特权访问从不。在EL1中执行异常返回操作时,此位被设置为PSTATE.PAN的值,并被复制到PSTATE.PAN。
SS, bit [21]Software step.显示在发生异常之前的PSTATE.SS的值。
IL, bit [20]Illegal Execution state bit.显示在发生异常之前的PSTATE.IL的值。
D, bit [9]处理状态D掩码。0b0不屏蔽针对当前异常级别的监视点、断点和软件步骤异常。针对当前异常级别的0b1监视点、断点和软件步骤异常被屏蔽。当调试异常的目标异常级别高于当前异常级别时,此位不会屏蔽该异常。
A, bit [8]SError中断掩码位。0b0未屏蔽异常。0b1异常已屏蔽。
I, bit [7]IRQ掩码位。0b0未屏蔽异常。0b1异常已屏蔽。
F, bit [6]FIQ掩码位。0b0未屏蔽异常。0b1异常已屏蔽。
M[4], bit [4]从中获取异常的执行状态。0:取自AArch64的异常。
M[3:0], bits [3:0]从中获取异常的AArch64状态(异常级别和所选SP)。0b0000 EL0t。0b0100 EL1t。0b0101 EL1h。

5 系统寄存器

ARMv8 体系结构支持如下7类系统寄存器。

  • 通用系统控制寄存器
  • 调试寄存器
  • 性能监控寄存器
  • 活动监控寄存器
  • RAS寄存器
  • 通用定时寄存器

参考:armv8手册的B1.2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值