首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

关于您的问题,我们可以从以下几个方面来进行解答:

  1. MRC (Machine Readable Code) 和 MCR (Machine Customized Code) 指令

MRC 和 MCR 是两种不同的指令集,它们都是为了解决不同的问题而设计的。MRC 是为了让机器能够读取和执行代码,而 MCR 则是为了让机器能够根据特定的条件和环境来自定义代码的执行过程。

  1. ILL_ILLOPC (非法操作码)

ILL_ILLOPC 是一种错误码,表示在执行指令时遇到了非法的操作码。这通常是由于以下原因导致的:

  • 代码本身存在问题,可能是由于编译器或者汇编器的错误。
  • 代码与目标处理器不兼容,可能是因为代码是为了在不同的处理器上运行而编写的。
  • 代码被篡改或损坏,可能是由于恶意攻击或软件故障导致的。
  1. 解决方案

如果在 Android 上执行 MRC 或 MCR 指令时遇到了 ILL_ILLOPC 错误,可以尝试以下方法来解决问题:

  • 确保代码是针对目标处理器编写的,并且与目标处理器兼容。
  • 检查代码是否被篡改或损坏,如果是,请使用正确的代码或重新获取代码。
  • 更新编译器或汇编器,确保它们能够正确地处理 MRC 和 MCR 指令。
  • 检查目标处理器是否支持 MRC 和 MCR 指令,如果不支持,请使用兼容的处理器或更改代码。

总之,如果在 Android 上执行 MRC 或 MCR 指令时遇到了 ILL_ILLOPC 错误,需要检查代码、编译器、处理器等方面的问题,并采取相应的解决措施。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

协处理器CP15介绍—MCRMRC指令(6)

概述:基于ARM的嵌入式应用系统中,存储系统的操作通常是由协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。 而访问CP15寄存器的指令主要是MCRMRC这两个指令。...而访问CP15寄存器的指令主要是MCRMRC这两个指令: MRC:协处理器寄存器到ARM处理器寄存器的数据传送指令(读出协处理器寄存器)。...当cond忽略指令为无条件执行。  Opcode_1:协处理器的特定操作码....CRm:协处理器中附加的目标寄存器源操作数寄存器。如果不需要设置附加信息,将CRm设置为c0,否则结果未知  Opcode_2:可选的协处理器特定操作码。..."mrc p15, 0, r1, c1, c0, 0\n"                      //使用__asm__  可以C函数中执行汇编语句 "orr

2.3K90

嵌入式:ARM协处理器指令总结

当一个协处理器硬件不能执行属于它的协处理器指令,将产生未定义指令异常中断。利用该异常中断处理程序可以软件模拟该硬件操作。...协处理器执行由Cop1和Cop2域定义的操作,使用CRn和CRm作为源操作数,并将结果放到CRd。其中,Cop1和Cop2为协处理器操作码,CRn、CRm和CRd均为协处理器的寄存器。...(二)协处理器的数据存取 协处理器数据传送指令从存储器读取数据装入协处理器寄存器,将协处理器寄存器的数据存入存储器。因为协处理器可以支持它自己的数据类型,因此,每个寄存器传送的字数与协处理器有关。...一些较复杂的ARM CPU中,常使用系统控制协处理器来控制Cache和MMU功能。这类协处理器一般使用这些指令来访问和修改片的控制寄存器。...汇编格式 (1)从协处理器传送到ARM寄存器: MRC{} ,,Rd,CRn,CRm{,} (2)从ARM寄存器传送到协处理器: MCR{}

64520
  • ARM指令

    1)Opcode项 Opcode是指令助记符,即操作码,说明指令需要执行的操作,指令中是必需的。...注意:指令中涉及到的寄存器都是协处理器的寄存器,不涉及ARM处理器的寄存器和存储器。操作码1、操作码2是协处理器要执行的操作。...,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2 MCR指令用于将ARM处理器寄存器中的数据传送到协处理器的寄存器中。...5)MRC指令 MRC {条件}协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2 MRC指令用于将协处理器寄存器中的数送到ARM处理器的寄存器中。...当处理器执行ARM程序段,称ARM处理器处于ARM工作状态,当处理器执行Thumb程序段,称ARM处理器处于Thumb工作状态。

    69420

    arm汇编指令详解带实例_汇编buf指令

    )中断产生进入这种模式 SVC(管理模式):当复位软中断指令执行时进入 Abt(数据访问终止模式):当存取异常进入 und(未定义指令终止模式):当执行未定义指令进入 sys(系统模式):使用和User...- 条件后缀决定了本句代码是否被执行,而不会影响一句和下一句代码是否被执行。 多指令流水线 为增加处理器指令流的速度,ARM使用多级流水线.,下图为3级流水线工作原理示意图。...当一个协处理器硬件不能执行属于它的协处理器指令,将产生一个未定义指令异常中断,该异常中断处理程序中,可以通过软件模拟该硬件操作。...(不必深究) mcr & mrc mrc用于读取CP15中的寄存器 mcr用于写入CP15中的寄存器 使用方法 mcr{} p15, , , , , {}...点号gnu汇编中表示当前指令的地址。 # 立即数前面要加# $,表示这是个立即数。

    1.4K11

    【嵌入式开发】 ARM 关闭 MMU ( 存储体系 | ID-Cache | MMU | CP15 寄存器 | C1 控制寄存器 | C7 寄存器 | 关闭 MMU )

    来将协处理器中的内容读取到通用寄存器中, 语法格式为 MRC{cond} P15,,,,, , 使用 MCR 将 Rd 寄存器中的值传送到...p15, 0, r0, c1, c0, 0 指令, 将 R0 寄存器中的值 写回到 C1 寄存器中; 4.设置程序跳转到返回点继续执行 : 使用 BL 指令跳转到 disable_mmu 标号处执行..., 同时将返回地址存储到了 LR 寄存器中, 返回跳转到 LR 寄存器中的地址执行即可, 使用 mov pc, lr 指令, 执行 lr 中地址指向的位置的代码; 5.代码示例 : disable_mmu...: mcr p15,0,r0,c7,c7,0 @ 设置 I-Cache 和 D-Cache 失效 mrc p15,0,r0,c1...disable_mmu : mcr p15,0,r0,c7,c7,0 @ 设置 I-Cache 和 D-Cache 失效 mrc

    2.4K10

    10_异常与中断

    预取一条指令,可以指令流水线中中将其标记为已中止。仅当内核尝试执行,才导致预取中止异常。异常发生在指令执行之前。...如果标记为中止的指令到达指令流水线的执行阶段之前刷新了指令流水线,则不会发生中止异常。数据中止异常发生在加载存储指令执行时,并且是尝试读取写入数据之后发生的。 ​...如果中止是由于指令流的执行尝试执行而产生的,则中止被描述为同步的,并且返回地址将提供导致该中止的指令的详细信息。 ​...使用MMU支持虚拟内存的系统中,中止处理程序可以将所需的虚拟页加载到物理内存中。实际,它尝试解决最初中止的原因,然后返回中止的指令并重新执行它。 ​...10.2.8 未定义的指令处理 ​ 如果CPU核尝试使用操作码执行一条指令ARM体系结构规范中描述为UNDEFINED),或者执行了协处理器指令但没有协处理器将其识别为可以执行指令,则会导致未定义的指令异常

    1.3K10

    11_GPIO中断

    ARM处理器使用协处理器指令MCRMRC来读写寄存器,控制cache、MMU、配置时钟(bootloader时钟初始化时会用到)等。CP15包含16个32位寄存器,编号为0~15。 ​...刚,CPU还不能管理cache,指令cache可关闭也可不关闭,但数据cache一定要关闭,否争可能导致刚开始的代码里,去读取数据到cache里读取,而这时候RAM数据还没有cache过来,导致数据预取错误...将gic的基地址通过mrc指令读取到r0寄存器。...-r12和lr保存在栈,用bl指令调用C函数handle_irq_c,C函数返回来后将r0-r12从栈上弹出,栈的lr弹出到PC,并将SPSR拷贝到CPSR,返回被打断的指令继续执行。...在编程,通常在异常向量表中放一条跳转指令,跳转去执行更复杂的操作。比如在IRQ_Handler函数中需要保存现场,等处理完异常后又需要恢复现场。 ​

    1.3K20

    第2阶段——编写uboot之编译测试以及改进(3)

    编译出错的解决方案:http://www.cnblogs.com/lifexy/p/7326172.html) 3.通过make生成的反汇编来查看代码是否正确 4.通过oflash烧写到板子nand flash...通过下图得出,取400MHZ,设置MDIV为0X5C,PDIV为0x1,SDIV为0x1 ?...r0,=CLKDIVN mov r1,#5 /*FCLK:HCLK:PCLK=1:4:8*/ str r1,[r0] mrc...中有ICAHE(指令缓存)和DCAHE(数据缓存) ICAHE: 指令缓存,用来存放执行这些数据的指令 DCAHE:用来存放数据,需要开启MMU才能开启DCAHE 没开启ICAHE之前,CPU读取SDRAM...地址数据,每次都需要先访问一次地址值,在读数据.当开了ICAHE后,第一次读取SDRAM地址数据,ICAHE发现缓存里没有这个地址数据,然后将SDRAM中需要读取的那部分一大块内存数据都复制缓存中

    61450

    【愚公系列】2022年03月 .NET架构班 018-ABP vNext 异常模块

    异常类 一、异常模块 1.默认异常信息 2.abp异常信息 3.abp友好异常信息 4.客户端输出异常信息 5.自定义异常状态码 6.校验异常 前言 异常,也成为内中断,也成为例外或者陷入,指源自CPU执行指令内部的事件...,如程序的非法操作码,地址越界,算术溢出、虚存系统的缺页以及专门的陷入指令等引起的。...异常程序是指程序执行一些非法指令,异常程序出现的原因有:1、程序设计时出现的编程错误运行时出现的硬件错误,一般可以通过异常处理解决问题;2、精心设计地入侵系统程序,如病毒。...常用异常处理包含两种情况 异常捕获 异常类 1.异常捕获 异常是程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。...C# 异常处理建立四个关键词之上的:try、catch、finall

    31140

    第2阶段——编写uboot之编译测试以及改进(3)

    编译出错的解决方案:http://www.cnblogs.com/lifexy/p/7326172.html) 3.通过make生成的反汇编来查看代码是否正确 4.通过oflash烧写到板子nand flash...通过下图得出,取400MHZ,设置MDIV为0X5C,PDIV为0x1,SDIV为0x1 ?...r0,=CLKDIVN mov r1,#5 /*FCLK:HCLK:PCLK=1:4:8*/ str r1,[r0] mrc...中有ICAHE(指令缓存)和DCAHE(数据缓存) ICAHE: 指令缓存,用来存放执行这些数据的指令 DCAHE:用来存放数据,需要开启MMU才能开启DCAHE 没开启ICAHE之前,CPU读取SDRAM...地址数据,每次都需要先访问一次地址值,在读数据.当开了ICAHE后,第一次读取SDRAM地址数据,ICAHE发现缓存里没有这个地址数据,然后将SDRAM中需要读取的那部分一大块内存数据都复制缓存中

    68460

    ARM(五).EINT and IRQ(1)

    p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_nF:OR:R1_iA MCR p15,0,R0,c1,c0,0 MRC p15, 0, R0, c1,..._I MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_C MCR p15, 0, R0, c1...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到

    56730

    ARM(六).TIMER and IRQ(1)

    p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_nF:OR:R1_iA MCR p15,0,R0,c1,c0,0 MRC p15, 0, R0, c1,..._I MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_C MCR p15, 0, R0, c1...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR

    62630

    ARM(七).TIMER and PWM(1)

    p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_nF:OR:R1_iA MCR p15,0,R0,c1,c0,0 MRC p15, 0, R0, c1,..._I MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_C MCR p15, 0, R0, c1...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR

    38130

    ARM(十三).WatchDog1

    是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前的符号不是本源文件中定义的,而是在其它源文件中定义的,本源文件中可能引用该符号,main定义c源文件中 AREA..., 0 BIC R0, R0, #R1_M MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_I MCR...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR

    76840

    ARM(十).RTC and TICK(1)

    p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_nF:OR:R1_iA MCR p15,0,R0,c1,c0,0 MRC p15, 0, R0, c1, c0..., 0 BIC R0, R0, #R1_M MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_I MCR...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR

    85830

    ARM(九).RTC and ALARM(1)

    p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_nF:OR:R1_iA MCR p15,0,R0,c1,c0,0 MRC p15, 0, R0, c1, c0..., 0 BIC R0, R0, #R1_M MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_I MCR...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR

    82210

    ARM(十二).ADC with IRQ1

    是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前的符号不是本源文件中定义的,而是在其它源文件中定义的,本源文件中可能引用该符号,main定义c源文件中 IMPORT..., 0 BIC R0, R0, #R1_M MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_I MCR...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR

    74220

    ARM(十四).WatchDog with IRQ

    是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前的符号不是本源文件中定义的,而是在其它源文件中定义的,本源文件中可能引用该符号,main定义c源文件中 IMPORT..., 0 BIC R0, R0, #R1_M MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_I MCR...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON ;MPLL...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR

    96040

    ARM(三).UART with FIFO(2)

    p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_nF:OR:R1_iA MCR p15,0,R0,c1,c0,0 MRC p15, 0, R0, c1,..._I MCR p15, 0, R0, c1, c0, 0 MRC p15, 0, R0, c1, c0, 0 ORR R0, R0, #R1_C MCR p15, 0, R0, c1...,NOP伪指令汇编将会被代替成ARM中的空操作,比如 MOV R0,R0 NOP NOP NOP NOP NOP NOP LDR R0, =MPLLCON...体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生,LR中保存的值等于异常发生PC的值减4(或者减2),因此各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量从堆栈中读出,覆盖到当前的寄存器中,LDM指令的寄存器列表中包含有PC使用'^',那么除了正常的多寄存器传送外,将SPSR拷贝到

    29410
    领券