Tianya
发布于 2026-07-15 / 2 阅读
0
0

ARMv7-M异常分析

ARMv7-M异常分析

1. 异常分析流程

  1. LR寄存器,判断使用PSP还是MSP
  2. 获取PSP/MSP
  3. 读取栈指针指向的内存
  4. 分析异常发生时,栈的状态。栈帧中的PC可以获取异常发生的位置
  5. 结合map文件、反编译文件,确定异常发生的原因。
进入 Fault Handler
读取 LR 获取 EXC_RETURN 值
LR.bit2 == 1?
异常前使用 PSP
异常前使用 MSP
读取 MSP 值
LR.bit4 == 1?
扩展栈帧
(浮点上下文)
栈指针需额外偏移
标准栈帧
(8字自动压栈)
SP 直接指向栈帧基址
按顺序提取栈帧内容
R0,R1,R2,R3,R12,LR,PC,xPSR
解析关键字段
PC:定位触发异常的指令
xPSR.IPSR:判断异常前是否在中断中
栈帧 LR:获取异常前调用返回地址
结合反汇编 / Map 文件定位源码
IPSR != 0?
异常发生在中断服务程序中
检查对应 ISR 代码
异常发生在线程模式
回溯调用链
辅助定位错误传递路径
可选:读取 SCB->CFSR
细分 MemManage/BusFault/UsageFault
综合 PC、xPSR、CFSR 等信息
确定异常根本原因

评论