当我拆开我的手臂精灵.so文件时,我看到了以下代码:
170c: e28fc600 add ip, pc, #0, 12
我只知道它是一个ARM"添加"指令。 但是从ARM参考手册"添加"语法如下:
op{S}{cond} {Rd}, Rn, Operand2
op{cond} {Rd}, Rn, #imm12 ; Thumb-2 ADD and SUB only
和Operand2是:
#constant
Rm {, shift}
这行asm应归结为语法:
op Rd, Rn, #constant
所以,代码应该意味着, "将pc和#0添加到ip"
然后问题是:
提前致谢。
答案 0 :(得分:3)
这可能是代码的一部分,会在链接时更改。
编码中的12表示立即将右旋12位。显然目前对#0没有意义。此外,整个操作码目前只不过是花哨的
mov ip, pc
在运行时看一下代码,可能#0变成了更有意义的东西。
这些数字永远不会说谎。
e28fc600
<强>半字节强>
e
总是28
立即添加,没有设置条件代码。f
Rb 是pc
或R15
。c
Rd 是ip
或R12
。600
是移位操作或零旋转 6 * 2 。由于指令相当 bizzare ,反汇编输出可能异常;通常只是常量显示#0xef00 ,因为没有人关心它是如何编码的。此外,由于这是共享库,因此可以在运行时通过重定位来修复指令。