神秘的ARM操作码

问题描述 投票:0回答:1

在反编译 Texas Instruments ARM (Thumb 2) Cortex-M4f 处理器 (CC2652RB) 的十六进制文件时,我遇到了一个我无法理解的操作码。 “90 FF FF 00”有什么作用(也许下面的上下文有帮助)?如果 ARM 标准中没有声明,德州仪器 (TI) 是否可以使用自定义操作码?

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
arm disassembly cortex-m opcode thumb
1个回答
0
投票

我的猜测是,这根本不是指令,而是数据。前面的指令是

pop {..., pc}
,通常是函数结束时的返回。所以这个“指令”不能通过直线执行到达。你只能通过其他地方的分支来执行它,我敢打赌你找不到一个。

但是在函数结束之后是寻找文字池的自然位置。事实上,我怀疑从神秘单词到下面几行的

push { ..., lr}
(这将是下一个函数的自然第一条指令)的所有内容都是文字池。请注意,例如上面的
ldr r2, [pc, #0x18]
,这绝对是来自文字池的加载,也将从该区域内加载。

神秘词后面的字节的反汇编乍一看像是合理的代码,但进一步检查是有问题的。它会破坏通常会被调用保留的寄存器(r4,r5),并且进一步向下有

lsls r0, ...
,其结果立即被
mov r0, #0
覆盖。正如前面提到的,陷入一个更合理的函数序言会很奇怪。

我怀疑如果你反汇编前面函数的其余部分,你会在某个地方找到一个与电脑相关的负载,它将神秘单词作为数据加载。

© www.soinside.com 2019 - 2024. All rights reserved.