1

当我反汇编我的 arm elf .so 文件时,我看到了以下代码:

 170c:  e28fc600    add ip, pc, #0, 12

我只知道这是一条ARM“添加”指令。但从 ARM 参考手册中,“add”的语法如下:

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”

那么问题来了:

  1. 那么代码的最后一部分“,12”呢?
  2. 您在哪里找到这些信息,GAS 手册或 ARM 手册?

提前致谢。

4

1 回答 1

3

这可能是代码的一部分,将在链接时更改。

编码中的 12 表示立即数将右旋转 12 位。显然,目前对于#0 来说没有意义。此外,整个操作码目前只不过是一种幻想

mov ip, pc

在运行时查看代码,可能 #0 更改为更有意义的内容。

数字从不说谎。

           e28fc600

小食

  1. e总是
  2. 28添加没有设置条件代码的立即数。
  3. f RbpcR15
  4. c RdipR12
  5. 600是移位器操作或零旋转 6*2

由于指令比较奇怪,反汇编的输出可能不正常;通常只显示常量#0xef00,因为没有人关心它是如何编码的。此外,由于这是一个共享库,因此可以在运行时通过重定位来修复指令。

于 2013-04-25T08:23:31.193 回答