C.SSPUSH 未启用相关 CFI 时会怎样?
Zicfiss 指令按官方 Zimop/Zcmop 兼容规则退化,不执行影子栈检查或更新。
C.SSPUSH 将 x1/x5 链接寄存器值压入向下增长的影子栈。
C.SSPUSH x1(Zicfiss,依赖 Zcmop)使用 C.MOP.1 编码,在 xSSE=1 时等价于 SSPUSH x1:先将 ssp 减小 XLEN/8,再把 x1 的值存储到新的 ssp 地址;只有存储成功后 ssp 才提交更新。未启用 Zicfiss 时按 C.MOP.1 的 Zcmop 行为执行。
C.SSPUSH 属于 RISC-V CFI 相关指令;其行为受 Zicfilp/Zicfiss 是否启用以及相关环境配置控制。
使用 jal ra, label 或 jalr ra, rs, imm。
结合 «c.sspush x1 # push ra onto shadow stack» 等实际代码理解该场景。
结合 «c.sspush x1 # push ra onto shadow stack» 等实际代码理解该场景。
Zicfiss 指令按官方 Zimop/Zcmop 兼容规则退化,不执行影子栈检查或更新。
RISC-V 非特权 ISA 的 Control-flow Integrity 章节定义 LPAD、SSPUSH、SSPOPCHK、SSRDP 和 SSAMOSWAP。