0

私は GNU の成功に非常に関心があり、ARM の objdump の潜在的なバグをどうするかについてフィードバックを求めていました....

「objdump -D --target=binary -m arm7tdmi」の出力を調べると、古い ARM7TDMI コアには存在しない命令が表示されます。

(私はランダムなビットのファイルを見て、それを ELF ファイルではなく生のバイナリとして扱っています。)

たとえば、mrcc、blx、および ldc2 は ARMv5 以降でのみ表示されますが、上記のコマンド ライン スイッチを使用した出力に表示されます。

(「-m armv4t」でも同じ問題が発生します。)

Ubuntu 9.04 のバージョン 2.19.1-multiarch を使用しています。

これは本物のバグですか、それとも別のスイッチを使用する必要がありますか?

心から、

クリス

4

2 に答える 2

2

私は他のいくつかのアーキテクチャ(非ARM)でもこれらのことに巻き込まれています。Objdumpは、コードまたはデータ部分を逆アセンブルしているかどうかを認識せず、定数やその他のデータ部分を含めて、逆アセンブルするために最善を尽くします。

于 2009-06-16T01:54:34.810 に答える
2

古いバイナリを表示している場合、命令ストリームにそのような命令が表示されるとは思わないため、正確にはバグではありません。

したがって、正しいコードが正しく表示されます。

objdump 逆アセンブラに、コードではなく他のタイプのデータを含むメモリ領域を強制的に逆アセンブルさせた場合 (たとえば、フラグ -D を使用)、次の異常な結果が予想される場合があります。

  • 命令ではないデータは、そのアーキテクチャで有効な命令として表示されます
  • 命令ではないデータは、そのアーキテクチャでは無効な命令として表示されます。
  • 命令ではないデータは、不正な命令として表示されます (oh no!)

-D を指定したので、これらのいずれかについて理解するのは難しいと思います。

異なる効果を持つ命令エンコーディングの再定義により、正しく有効な命令ストリームが異なる方法でデコードされる例を指摘できれば、それは本物のバグだと思います。

あなたの例は、あなたの仕事に何らかの問題 (不便を含む) を引き起こしましたか?

于 2009-06-15T22:52:26.353 に答える