我有一个使用 ARM-V7A 指令集的 Android .so 文件。
我把它拖到 IDA 中,有一行显示:
0x1000: b #0x102c
十六进制窗口显示 的二进制代码b #0x102c
是14 e0
。
14 e0
具有二进制格式0001 0100 1110 0000
,这不是 ARM 手册对该指令进行编码的方式。
除非
1 4 e 0
0001 0100 1110 0000
8 ----- 1 16 ---- 9
8 -- 1
表示 1 位到 8 位,9 -- 16
表示 9 位到 16 位
为什么指令在 .so 文件中以这种方式编码?
例如,如果我想在运行时更改某个地址的某些指令。我会将其更改为0x14e0
(指令在 .so 文件中的编码方式)还是更改为0xe014
(指令在 ARM 手册中的编码方式)?