1、 问题场景
访问陷阱(Trapping)是Arm架构中实现权限控制的核心机制,当低异常等级(EL)尝试执行受限操作时,系统自动将其重定向至高EL处理。
当访问陷阱发生时,处理器会停止执行当前的指令流,并跳转到一个预设的处理程序,这个处理程序被称为陷阱处理程序(Trap Handler)。
处理器会保存当前的执行状态,以便陷阱处理程序可以正确地处理异常情况。
2、软硬件环境
1)、软件版本:无
2)、电脑环境:Window 10
3)、外设硬件:无
3、访问陷阱
1) 访问陷阱的核心机制
触发条件
特权操作:低EL访问高EL专属寄存器(如系统控制寄存器)。
内存权限违规:未对齐访问(SCTLR_ELx.A=1时)或越权访问内存区域。
调试事件:断点、观察点触发时。
配置错误:如访问未实现的PMU计数器(PMEVCNTR/PMEVTYPER)。
陷阱流向规则
EL0 → EL1:用户态访问内核特权资源(如PMU寄存器)。
EL1 → EL2:Guest OS尝试访问虚拟化控制寄存器。
EL1/EL2 → EL3:安全状态切换请求(如调用Secure Monitor)。
2)关键控制寄存器
SCTLR_ELx:
.A位=1时,未对齐访问触发对齐错误陷阱。
PMUSERENR_EL0:
控制EL0是否可访问PMU寄存器(需.ER和.EN同时为1)。
MDCR_EL2:
.HPMN定义EL1可访问的PMU计数器数量,超限访问触发EL2陷阱。
3)典型陷阱场景示例
示例1:EL0非法访问PMU寄存器
场景:
EL0应用尝试写入PMEVTYPER_EL0(性能监控事件类型寄存器)。
陷阱流程:
若PMUSERENR_EL0.EN=0,访问被阻断。
系统生成数据异常(Data Abort),陷阱至EL1处理。
EL1通过ESR_EL1解析错误原因(如STATUS=0x21表示权限错误)。
示例2:EL1未对齐内存访问
场景:
EL1内核执行非对齐64位存储指令(如STR X0, [X1],X1地址未对齐)。
陷阱流程:
若SCTLR_EL1.A=1,触发对齐错误。
生成同步异常(Synchronous Abort),陷阱至EL1自身处理。
若EL2启用且配置拦截(如HCR_EL2.TGE=1),则转由EL2处理。
示例3:EL2虚拟化资源拦截
场景:
EL1虚拟机尝试访问CNTVCT_EL0(虚拟计数器)。
陷阱流程:
EL2设置HCR_EL2.TVM=1(虚拟计时器陷阱使能)。
访问触发陷阱至EL2,由Hypervisor模拟该寄存器.
4)陷阱 访问的意义
安全性:防止用户程序越权操作硬件资源。
虚拟化:Hypervisor透明截获Guest OS敏感操作。
错误隔离:如未对齐访问可能引发TLB冲突或外部中止,陷阱确保系统稳定性。