1

arm elf .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 に追加する」ことを意味する必要があります。

次に、質問は次のとおりです。

  1. コードの最後の部分「、12」はどうですか?
  2. これらの情報は、GAS マニュアルまたは ARM マニュアルのどこで見つけましたか?

前もって感謝します。

4

1 に答える 1

3

これはおそらくリンク時に変更されるコードの一部です。

エンコーディングの 12 は、即値が 12 ビット右回転されることを示します。明らかに、それは現在、#0 には意味がありません。また、オペコード全体は現在、空想にすぎません

mov ip, pc

実行時にコードを見てください。おそらく #0 は、より意味のあるものに変更されています。

数字は決して嘘をつきません。

           e28fc600

ニブル

  1. eいつも
  2. 28条件コードを設定せずに即時に追加します。
  3. f RbpcまたはR15です。
  4. c RdipまたはR12です。
  5. 6006*2で回転され たシフター操作またはゼロです。

命令はかなり奇妙であるため、逆アセンブルされた出力は異常である可能性があります。通常は定数だけが#0xef00と表示されます。また、これは共有ライブラリであるため、命令は実行時に再配置によって修正される可能性があります。

于 2013-04-25T08:23:31.193 に答える