ARMv8寄存器解释

发布时间:2026/6/5 2:12:13

ARMv8寄存器解释 AArch64寄存器分为五大类通用GP寄存器、PSTATE状态、SP/ELR/SPSR异常专用寄存器、系统控制寄存器(SysReg)、NEON/FPU向量浮点寄存器所有系统寄存器按ELx分级隔离是ARMv8安全隔离TrustZone、权限管控、漏洞防护的硬件根基。重要前提AArch64寄存器天然64bitXn64位完整寄存器、Wn低32位写Wn自动高位清零区别ARMv7 32位架构逆向关键特征。一、通用整数寄存器X0~X30 XZR/WZR32个逻辑寄存器共31个可编程通用寄存器 1个硬件零寄存器EL0/EL1/EL2/EL3共用同一组物理GP靠特权级异常现场保存隔离上下文。1. 通用寄存器功能划分遵循AAPCS64调用规范安卓Native、内核汇编通用寄存器别名用途安全/逆向重点X0~X7入参/返回寄存器函数前8个入参X0/X1存放返回值syscall中X8系统调用号Linux/Android内核SVC入口硬性约定X8-间接结果存放、syscall编号专用X9~X15临时易毁寄存器caller-saved函数调用不保护漏洞ROP常用跳板寄存器X16/X17IP0/IP1链接器临时、PLT跳转、动态链接桩代码专用ELF GOT跳转关键X18Platform寄存器Linux/Android内核固定用作平台指针用户态禁止随意篡改X19~X28被调用保存寄存器callee-saved函数进入/退出必须栈上保存恢复栈溢出利用最难覆盖X29FP(Frame Pointer)栈帧基址开启-fno-omit-frame-pointer时用于栈回溯安卓原生调试、栈溢出溯源核心CFI防护依赖FPX30LR(Link Register)函数调用返回地址BL/BLR自动写入X30RETBR X30控制流劫持最关键目标PAC签名保护对象XZR/WZRZero Reg硬件只读零寄存器读永远0写无效用于常量置0、地址偏移运算、条件判空补充没有独立PC物理寄存器AArch64不能直接MOV修改PC只能通过BR/BL/RET/ERET跳转硬件从根源减少任意篡改程序计数器漏洞。二、栈指针寄存器 SP_ELx分特权级独立物理寄存器4组硬件SPARMv8每个异常级别拥有独立硬件栈指针硬件隔离栈是内核/TEE栈隔离的基础SP_EL0、SP_EL1、SP_EL2、SP_EL3全部64位。SPSel(PSTATE第0位)SP选择开关SPSel0当前特权级代码强制使用SP_EL0用户栈SPSel1使用本级别专属SP_ELxEL1用SP_EL1、EL3用SP_EL3EL0应用层APP只能使用SP_EL0无法访问SP_EL1/2/3EL1Linux内核可切换SPSel进程用户态栈SP_EL0内核栈SP_EL1EL3(ATF/TrustZone Monitor)专属SP_EL3安全世界栈Normal World无法访问Android安全点提权漏洞常利用SPSel配置缺陷跨级别篡改栈指针。三、异常上下文寄存器ELR_ELx SPSR_ELx分EL0~EL3四组每组ELx配套一对寄存器硬件自动在异常触发时保存现场、ERET时自动恢复4个EL共8个物理寄存器ELR_ELxException Link Register64bit异常触发时硬件自动把异常发生处PC存入ELR_ELx异常返回指令ERET硬件从ELR_ELx加载回PC。漏洞利用异常劫持、SVC/SMC劫持核心篡改ELR即可跳转任意地址。SPSR_ELxSaved Program Status Register32bit异常触发自动存入当前PSTATE所有标志ERET时写回PSTATE存储NZCV条件标志 DAIF中断屏蔽 CurrentEL SPSel无法直接MSR/PSTAE只能通过SPSR_ELx读写历史状态。四、PSTATE处理器状态集合无独立物理寄存器位域分散硬件状态PSTATE是处理器实时状态位合集不能整体读写位域分为条件标志、中断屏蔽、特权配置。位域位位置功能说明安全重点N(负)31运算结果为负置1Z(零)30运算结果为0置1C(进位)29无符号进位V(溢出)28有符号溢出D9调试异常屏蔽位A8SError(硬件致命异常)屏蔽I7IRQ普通中断屏蔽F6FIQ快中断屏蔽CurrentEL[3:2]当前运行异常级别00EL0、01EL1、10EL2、11EL3SPSel0SP栈指针选择位读写规则EL0仅能读写NZCVDAIF/CurrentEL/SPSel仅EL1高特权可MSR修改关闭I位关内核中断。五、系统寄存器SysRegARMv8最庞大体系MRS/MSR专用访问按_ELx划分访问权限访问指令MRS Rd, SYSREG_ELx(读) / MSR SYSREG_ELx, Rd(写)低于寄存器后缀ELx的特权级无法访问硬件拦截。按功能分类Android内核/TEE/MMU/TrustZone高频寄存器5.1 MMU地址转换内存管理EL1内核核心Linux页表管理TTBR0_EL1用户空间(EL0)页表基地址低VA地址0~2^48TTBR1_EL1内核空间(EL1)页表基地址高VA地址内核高半区TCR_EL1转换控制寄存器配置地址位数(39/48bit)、页粒度(4K/16K/64K)、内存属性、页表级数MAIR_EL1内存属性寄存器配置Normal/Device/nGnRE等缓存属性SCTLR_EL1系统控制寄存器内核开关总闸Bit0(M)MMU总开关Bit2(C)数据Cache开启Bit12(I)指令ICache开启安卓内核开机汇编必配置SCTLR_EL1开启MMU。5.2 故障异常信息寄存器崩溃、缺页、非法访问溯源1.ESR_ELx异常原因编码寄存器EC域(31:26)异常类型SVC/SMC/缺页/权限错误/未定义指令ISS异常附加信息安卓crash、内核oops依靠ESR解析故障。2.FAR_ELxFault Address出错访问的虚拟地址缺页异常保存故障VA。3.VBAR_ELx异常向量基址指定当前EL异常向量表起始地址Linux vectors 基址写入VBAR_EL1。5.3 TrustZone安全管控寄存器仅EL3可访问ATF固件核心1.SCR_EL3安全配置寄存器Normal/Secure世界总开关NS(bit0): 0Secure安全世界、1Normal普通安卓世界IRQ/FIQ/EA配置三类中断路由到EL3还是EL12.SPSR_EL3/ELR_EL3SMC指令触发安全世界切换时保存Normal现场SMC是安卓指纹/SE密钥TEE调用唯一入口。5.4 定时器、计数器、ID寄存器只读ID寄存器用于SOC识别CNTFRQ_EL0系统定时器时钟频率CNTVCT_EL0虚拟计数器用户态可读计时MIDR_EL1CPU型号ID芯片架构/大核小核识别高通MTK内核判定依据5.5 PAC/BTI安全扩展寄存器ARMv8.3安卓高版本CFI/指针认证PACIBKEY_EL1、IAKEY_EL1PAC签名密钥寄存器硬件指针加密防ROP安卓12默认启用。六、NEON/FPU/SIMD向量浮点寄存器 V0~V3132×128bit每个Vn128bit可分段访问不同位宽Qn128bit全宽向量运算Dn低64bit双精度浮点Sn低32bit单精度浮点Hn16bit半精度浮点、Bn字节调用规范AAPCS64V0~V7传浮点入参V0/V1浮点返回值V8~V15 callee保存V16~V31 caller临时寄存器。Android场景视频硬解、OpenGL、AI NN推理、libc浮点运算全依赖V寄存器恶意代码常利用向量寄存器隐藏Shellcode。硬件特性EL0默认可使用浮点内核可通过CPACR_EL1开关全局禁用FPU。七、补充关键安全规则安卓逆向/漏洞必备1.寄存器特权隔离规则后缀_EL1寄存器EL0不可读写EL1/EL2/EL3可访问_EL3寄存器只有EL3能读写Normal世界(安卓Linux)完全无法触碰。2. AArch32兼容说明切到AArch32(32位ARM/Thumb)后寄存器变为ARMv7架构R0~R15SP/R13、LR/R14、PC/R15寄存器模型完全重构现代64位安卓APP默认AArch64。3. 不能直接修改系统寄存器必须MRS/MSR硬件权限校验非法访问触发未定义异常。八、精简分类速记通用整数X0~X30XZR代码运算、传参异常现场SP_ELx / ELR_ELx / SPSR_ELx栈异常现场保存状态PSTATE标志中断特权系统寄存器TTBR/TCR/SCR/ESR等MMU、TrustZone、异常控制向量浮点V0~V31NEON多媒体浮点

相关新闻