SSAMOSWAP.W 未启用相关 CFI 时会怎样?
SSAMOSWAP.W 是 AMO 编码而非 Zimop/Zcmop MOP;若 SSE 访问控制或 S-mode 条件不满足,它会进入规定的非法指令或虚拟指令异常路径。
SSAMOSWAP.W 对影子栈内存执行 AMO 风格交换,返回旧值并写入新值。
入门理解:SSAMOSWAP.W 从 rs1 指向的影子栈位置原子读取 32 位字值写入 rd,并把 rs2 的低 32 位写回原地址。它用于影子栈切换、检查点保存等需要保护 ssp 相关数据的场景。在 RV64 上读出的 32 位值会符号扩展到 rd。
只显示规范定义的编码、条件和架构可见状态。
SSAMOSWAP.W 是 Zicfiss 的影子栈 AMO 指令;其 SSE 访问条件由当前特权环境控制。
使用 jal ra, label 或 jalr ra, rs, imm。
结合 «ssamoswap.w t0, t1, (t2)» 等实际代码理解该场景。
结合 «ssamoswap.w t0, t1, (t2)» 等实际代码理解该场景。
SSAMOSWAP.W 是 AMO 编码而非 Zimop/Zcmop MOP;若 SSE 访问控制或 S-mode 条件不满足,它会进入规定的非法指令或虚拟指令异常路径。
RISC-V 非特权 ISA 的 Control-flow Integrity 章节定义 LPAD、SSPUSH、SSPOPCHK、SSRDP 和 SSAMOSWAP。