如何访问在进入管理员模式时保存的用户R13和R14?我正在使用ARM7TDMI.
IE我不想访问管理程序R14,它现在包含返回用户模式的地址,而不是想要用户模式的链接寄存器的值.这是我正在编写的调试器的一部分.
这些寄存器有特殊的别名吗?
谢谢
我将描述您的具体问题的答案,但同样的方法也适用于其他模式.
您需要通过将CPSR中的模式位更改为系统模式来更改处理器模式.这将使您可以访问用户模式的SP/LR(R13和R14).请记住,系统模式具有特权,但其R13和R14与用户模式的R13和R14相同.
进入系统模式后,请阅读R13和R14并将它们放在您想要的位置.然后只需将模式位切换回以前的模式(我相信这是你的例子中的管理员模式),你很高兴.
请注意,我们没有从主管切换到用户模式. 如果您从主管切换到用户,则无法返回主管模式.(否则将无法保护用户代码升级权限).这就是我们使用系统模式的原因 - 系统模式具有特权,但寄存器与用户模式相同.
您可以通过操纵CPSR中的模式位来随意切换任何特权模式.我认为他们是低5位?我在路上,没有触手可及的信息.否则我会为你提供我上面所描述的汇编代码.实际上,如果你想把一些头发放在胸前,拿走我上面给你的东西,实施它,测试它,然后把它贴回来.:-D
(我应该为"一般情况"添加一件事(你的非常具体) - 你可以检查SPSR以查看"你来自哪里" - 并用它来确定你需要切换到哪种模式.)
顺便说一句,我最近刚刚为我的一位客户做过这样的事情......我猜是小世界.