当我试图从映射为读/写(AP2 == 0)的区域执行代码时,CPU发出一个权限错误(异常类== 0b100001,指令错误状态代码== 0b001111)。当我将映射更改为只读(AP2 == 1)时,权限错误就会消失。这是MMU预期的行为吗?我认为可以从映射为读/写的区域执行代码。有人能告诉我"Arm架构参考手册“中的一个章节解释了这一点吗?
供参考:
发布于 2022-09-27 09:03:47
ARM DDI 0487I.a,D8-5142页有答案。
防止从可写位置执行
有一些寄存器控制字段可以用来强制将可写内存视为XN、PXN或UXN,而不管相应描述符字段的值如何。
对于支持两个异常级别的翻译机制中的第1阶段翻译,对应的SCTLR_ELx.WXN字段执行以下所有操作:
如果值为0,则值为1对访问permissions.
的值。如果内存区域可从较高的异常级别ELx写入,则被视为特权执行--不考虑块描述符或页面描述符PXN field.的值。
https://stackoverflow.com/questions/73864597
复制相似问题