2011-08-25 10 views
8

gccでARM用に構築されたオブジェクトを逆アセンブルしようとしています。残念ながら、objdumpは、コードがARMとThumbのどちらであるかを推測しようとしており、間違っています。実際にARMの場合、私のコードはThumbだと考えています。objdumpとARM vs Thumb

objdumpにすべての命令をThumb(-Mforce-thumb)として解釈させるオプションがありますが、ARMモードを強制するものはありません。

これは私にとって本当に奇妙な欠点のように思えます。私は組み込み機器を使用しています(デバッグの唯一の手段は逆アセンブリを見ることです)。私は、objをサポートしていないARMアーキテクチャを使用するようにobjdumpに指示するなど、さまざまなアプローチを試しましたが、何も動作しないようです。何か案は?

(そして、はい、私は指示が本当に ARMであることを知っている...)

+0

バイナリ(elf)ファイルを削除していますか、おそらく情報がそこにあり、削除されている可能性があります。あるいは、デバッグ情報をバイナリに含めるためにスイッチを追加する必要があります。 –

+0

今日は 'objdump ... -Mno-force-thumb'です。これが2011年に戻ったのかどうかは言えません。本質的にはARMかThumbのどちらかですので、 'no-force-thumb'と言うと、命令セットはARMです。 – JSmyth

答えて

0

これは、コンパイラ/リンカまたはobjdumpのいずれかのバグのように聞こえます。通常、シンボルはThumbまたはARMの場合は適切にマークし、それに応じて逆アセンブルする必要があります。

前記、あなたが試すことができますいくつかあります:

  1. は、プレーンバイナリ(-bバイナリ-D)としてファイルを解釈する - これは、シンボルのチェックを無効にし、ARMとしてファイル全体を分解します。欠点:出力にゴミが多く、素敵なアドレスがありません。
  2. IDA Proを使用。間違って推測しても、いつでもその決定を上書きすることができます。また、はるかに良い分解環境です。
+0

私はシンボル情報が必要なので、私は何を見ているのか知っているので、生のバイナリを使用してもそれをカットすることはできません。問題のファイルにデバッグ情報があるので、マーキング情報がそこにあるはずです。私のビルドプロセスは複雑ですが、gcc全体に関わります。どのようなアイデアは、シンボルマーキングを取り除くかもしれない何ですか? –

+0

正確に何が問題なのかを言うのは難しいです。シンボルテーブルの内容を表示し、arm-dis.cのprint_insn(_arm)を見てください。たぶんそれはあなたにいくつかのアイデアを与えるでしょう。 –

3

arm-linux-gnueabi-objdump -marm -b binary -D私のためのトリックです。しかし、それはシンボル情報を保存しないので、あなたが探しているものではありませんが、逆アセンブルが始まります。

関連する問題