我已经能够使用命令hvc #0
从svc模式将处理器置于hyp模式。我在HVBAR上做了一些注册读写操作,我想回到管理员模式
我尝试了以下方法:
在调用hvc之前复制sp和lr,然后在寄存器操作结束后恢复它们。然后分支到链接寄存器值。
mov r5,sp;
mov r6,lr;
bx lr;
我还尝试了将链接寄存器直接传递给程序计数器的旧方法
mov pc,lr;
我尝试从hyp模式进行svc调用,并期望它将处理器状态更改为管理员模式
svc #0;
我在寄存器操作结束时使用了eret
指令来查看它是否会产生影响。它没有任何影响。
但这些都没有导致处理器改变状态。运行代码后我的CPSR和SPSR中的模式仅为非安全管理程序模式 经过文献调查后,我得知我必须使用ELR_Hyp寄存器,因为我使用的是虚拟化扩展。但我无法理解如何使用ELR_Hyp从Hyp模式返回Supervisor模式。
答案 0 :(得分:1)
从Hyp模式下降到PL1模式很像从PL1模式下降到用户模式;这是一个例外回报。唯一的区别是您必须使用特定的eret
instruction,而不是movs pc, lr
和朋友。