SSAMOSWAP.D 未启用相关 CFI 时会怎样?
SSAMOSWAP.D 不使用 Zimop/Zcmop 回退;其执行遵循 SSE 访问控制和影子栈内存保护规则,并会依特权级与状态触发非法指令、虚拟指令或 store/AMO access-fault 异常。
SSAMOSWAP.D(仅 RV64)对影子栈内存执行 AMO 风格交换,返回旧值并写入新值。
入门理解:SSAMOSWAP.D 从 rs1 指向的影子栈位置原子读取64 位双字值写入 rd,并把 rs2 的对应宽度值写回原地址。它用于影子栈切换、检查点保存等需要保护 ssp 相关数据的场景。该形式仅适用于 RV64。
只展示规范定义的编码、条件和架构可见状态;不模拟流水线、缓存一致性或平台策略。
SSAMOSWAP.D 是 RV64 的 Zicfiss AMO;它原子读取旧双字到 rd,再把 rs2 的双字写至 rs1 指向的影子栈位置。
使用 jal ra, label 或 jalr ra, rs, imm。
结合 «ssamoswap.d t0, t1, (t2)» 等实际代码理解该场景。
结合 «ssamoswap.d t0, t1, (t2)» 等实际代码理解该场景。
SSAMOSWAP.D 不使用 Zimop/Zcmop 回退;其执行遵循 SSE 访问控制和影子栈内存保护规则,并会依特权级与状态触发非法指令、虚拟指令或 store/AMO access-fault 异常。
RISC-V 非特权 ISA 的 Control-flow Integrity 章节定义 LPAD、SSPUSH、SSPOPCHK、SSRDP 和 SSAMOSWAP。