尝试在Android上执行MRC或MCR指令时获取ILL_ILLOPC(非法操作码)

时间:2011-10-07 18:28:01

标签: android assembly arm

我正在使用ARM Assembly尝试访问多个协处理器寄存器。每当我有类似的东西时

mcr p15, #1, r1, c1, c0

mrc p15, #0, r0, c1, c0

我得到signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 80400d00错误,这意味着某些东西正在获得非法(不存在,我假设)操作代码(指令)。有几种可能性。 mrcmcr指令本身可能是非法的,但代码编译时没有任何投诉。如果这是特权模式问题,我希望看到ILL_PRVOPC SIGILL。

另一种可能性是,mrcmcr(语法为MRC{2}<c><q> <coproc>, #<opc1>, <Rt>, <CRn>, <CRm>)的操作码可能是非法的。我尝试了可能的操作码,但我仍然得到相同的错误和相同的堆栈转储。

Android通常是否允许使用指令,或者我正在做的事情是错的?还有什么我应该去调试的吗?

1 个答案:

答案 0 :(得分:5)

确实是由于证据不足。您不能从用户模式执行此操作,它会导致未定义的指令异常转换为SIGILL / ILL_ILLOPC。 grep -Hr PRVOPC <path-to-linux-kernel>/arch/arm没有产生任何结果,而为ILLOPC做同样的事情会让你落到do_undefinstr()