【问题标题】:Getting ILL_ILLOPC (illegal opcode) when trying to execute MRC or MCR instructions on Android尝试在 Android 上执行 MRC 或 MCR 指令时获取 ILL_ILLOPC(非法操作码)
【发布时间】:2011-12-03 05:33:30
【问题描述】:

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

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 通常是否允许这些指令,或者是我做错了什么?还有什么我需要调试的吗?

【问题讨论】:

    标签: android assembly arm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多