TI Cortex-M4f(CC2652RB)未知指令解析及自定义Opcode合规性咨询
关于CC2652RB中未解析指令及TI自定义Opcode权限的疑问
在对德州仪器ARM Thumb2架构Cortex-M4F处理器(CC2652RB)的Hex文件反编译时,遇到无法解析的指令序列90 FF FF 00,请求解析该指令功能;同时咨询德州仪器是否被允许使用ARM标准未声明的自定义Opcode。
初始上下文代码
19 46 mov r1, r3 06 4A ldr r2, [pc, #0x18] 00 28 cmp r0, #0 11 60 str r1, [r2] 18 BF it ne 01 20 movne r0, #1 BC BD pop {r2, r3, r4, r5, r7, pc} 90 FF FF 00 ? 14 20 movs r0, #0x14 02 40 ands r2, r0 04 04 lsls r4, r0, #0x10 00 20 movs r0, #0 30 72 strb r0, [r6, #8] 05 00 movs r5, r0 08 04 lsls r0, r1, #0x10 00 20 movs r0, #0 F0 B5 push {r4, r5, r6, r7, lr} 40 F6 FF 7C movw ip, #0xfff 10 F8 01 3B ldrb r3, [r0], #1 00 24 movs r4, #0 08 2C cmp r4, #8
补充前置代码(起始地址任意)
0x40: 18 B1 cbz r0, # 0x4a 0x42: 00 F0 1F FA bl # 0x484 0x46: 00 20 movs r0, #0 0x48: BC BD pop {r2, r3, r4, r5, r7, pc} 0x4a: 00 F0 07 F8 bl # 0x5c 0x4e: BC BD pop {r2, r3, r4, r5, r7, pc} 0x50: 00 09 lsrs r0, r0, #4 0x52: 3D 00 movs r5, r7 0x54: B4 01 lsls r4, r6, #6 0x56: 00 10 asrs r0, r0, # 0x20 0x58: 14 20 movs r0, # 0x14 0x5a: 02 40 ands r2, r0 0x5c: BC B5 push {r2, r3, r4, r5, r7, lr} 0x5e: 16 48 ldr r0, [pc, # 0x58] 0x60: 16 4D ldr r5, [pc, # 0x58] 0x62: 04 21 movs r1, #4 0x64: 01 90 str r0, [sp, #4] 0x66: 00 20 movs r0, #0 0x68: 28 70 strb r0, [r5] 0x6a: 01 A8 add r0, sp, #4 0x6c: 00 F0 8A FA bl # 0x584 0x70: 10 B1 cbz r0, # 0x78 0x72: 01 20 movs r0, #1 0x74: 28 70 strb r0, [r5] 0x76: 07 E0 b # 0x88 0x78: 11 4C ldr r4, [pc, # 0x44] 0x7a: 02 21 movs r1, #2 0x7c: 20 46 mov r0, r4 0x7e: 00 F0 AF F9 bl # 0x3e0 0x82: 01 21 movs r1, #1 0x84: 29 70 strb r1, [r5] 0x86: 08 B1 cbz r0, # 0x8c 0x88: 00 20 movs r0, #0 0x8a: BC BD pop {r2, r3, r4, r5, r7, pc} 0x8c: 0D 4B ldr r3, [pc, # 0x34] 0x8e: 22 78 ldrb r2, [r4] 0x90: 64 78 ldrb r4, [r4, #1] 0x92: 03 F1 20 01 add.w r1, r3, # 0x20 0x96: 18 68 ldr r0, [r3] 0x98: 40 B1 cbz r0, # 0xac 0x9a: 1D 79 ldrb r5, [r3, #4] 0x9c: AA 42 cmp r2, r5 0x9e: 02 D1 bne # 0xa6 0xa0: 5D 79 ldrb r5, [r3, #5] 0xa2: AC 42 cmp r4, r5 0xa4: 01 D0 beq # 0xaa 0xa6: 08 33 adds r3, #8 0xa8: F5 E7 b # 0x96 0xaa: 19 46 mov r1, r3 0xac: 06 4A ldr r2, [pc, # 0x18] 0xae: 00 28 cmp r0, #0 0xb0: 11 60 str r1, [r2] 0xb2: 18 BF it ne 0xb4: 01 20 movne r0, #1 0xb6: BC BD pop {r2, r3, r4, r5, r7, pc}
解答
1. 指令序列90 FF FF 00的解析
这段4字节序列并非指令,而是32位字面常量数据,永远不会被CPU当作指令执行:
- 从补充代码可知,它紧跟在
0xb6地址的pop {r2, r3, r4, r5, r7, pc}指令之后,该pop指令会直接跳转到调用者的程序计数器(PC)位置,跳过后续的这段数据。 - 按ARM小端模式调整字节序后,数据值为
0x00FFFF90,是为前面0xac地址处的ldr r2, [pc, #0x18]指令准备的目标地址:Thumb架构中,PC值为当前指令地址+4,计算得目标地址为0xac + 4 + 0x18 = 0xc8,正好指向这段数据,用于加载到r2寄存器中作为操作数使用。
2. 德州仪器是否允许使用ARM标准未声明的自定义Opcode
ARM架构授权规则明确:
- 仅获得内核指令集定制授权的厂商,才有权限定义并使用未公开的自定义Opcode;
- CC2652RB基于标准Cortex-M4F内核,德州仪器仅拥有该架构的标准授权,无权使用ARM标准未声明的自定义Opcode。
- 若遇到无法解析的“指令”,几乎都是数据被误当作指令反编译,或是工具链的解析错误,而非自定义指令。
内容的提问来源于stack exchange,提问作者bobuhito
相关产品推荐
相关产品推荐

