私は/(binutilsを使用して)thumb2(16ビットおよび32ビット)命令の手動分解を行うためのコードを書いています。本物の ARM 命令と DATA 部分を区別する問題に直面しています。
最大の問題は、命令がワードで整列されていないことです。そのため、32 ビット命令を読み取ろうとすると、多くの場合、実際には次の命令と重複します。
助けてください。
ありがとう、VJ
シンボルテーブルも読み取ることができる場合、GCCはシンボル$ a $ t $ dを残して、バイトの解釈方法を切り替える必要があるアドレスを示します。それぞれ、Arm、Thumb、Dataです。
たとえば、これはobjdumpがリテラルプールの内容を表示することを認識しているが、.textセクションの隣接する関数間に存在しているにもかかわらず、それらを命令にマップし直そうとしない方法です。
arm 命令は常にワード境界で整列されます。親指は常に整列します。thumb2 は可変語長です。また、固定語長と同じように可変語長を逆アセンブルすることはできません。可変語長命令セットを逆アセンブルするには、アラインされたアドレスのメモリを単純にウォークスルーして逆アセンブルすることはできません。ある形式では、実行順にデータをたどって各命令の開始アドレスを見つけ、そのリストから逆アセンブルする必要があります。