2

IDA Pro では、以下の ARM ASM が表示されます。IDA が 7200 を取得するために使用するビットは何ですか?

A3 F5 E1 53 SUB.W R3、R3 #7200

便宜上、値は次のようにバイナリです。

7200 = 0x1c20 = 0001 1100 0010 0000

0xA3F5E153 = 1010 0011 1111 0101 1110 0001 0101 0011

編集:IDA選択でファイルをロードします。Mach-O ファイル (DYLIB) ARMv7[macho.lhc]

4

1 に答える 1

2

ARM ARM(ARMアーキテクチャリファレンスマニュアル)は、特にARMおよびthumb命令エンコーディングに適したリソースです。thumb2については、ARMv7-M TRM(テクニカルリファレンスマニュアル)を探してください。どちらも無料でダウンロードできます。

(私はこれを7200の10進数ではなく0x7200の16進数で開始することを知っています。それで、最終的にはすべてうまくいきます)。

サブr3、r3、#0x7200は、次のようにエンコードされます(ARMの場合)。

e2433c72 sub r3、r3、#29184; 0x7200

Eは常に実行することを意味します

2の上位3ビットは、他の固定ビットがない即時のデータ処理を示します。2の下位ビットと4の上位3ビットは0010であり、これはサブを意味します。4の下位ビットはフラグを更新することを意味するsビットです(そのビットが設定されている場合はsubs命令になります)。次の2つのニブル3と3は、次の4ビットのr3の2つのインスタンスであり、cは回転フィールドであり、下位8ビットはイミディエートです。

シフターオペランドはimmed_8rotate_right(rotate_immed * 2)であるため、右に0x72回転(24ビット)します。これは、左に32〜24ビット回転するのと同じで、すぐに0x7200になります。

thumb2(sub.wの由来)の場合、次のようにエンコードされます。

f5a3 43e4 sub.w r3、r3、#29184; 0x7200

T3エンコーディング

いくつかのビットがある場合とない場合の0xF1A00000は、SUB.W rd、rd、#constのベースラインエンコーディングです(12ビットの即時、T4には12ビットのimmedもあります)。

0x5の0x4ビットはiビットであり、設定されているため、sビットが設定されておらず、subではなくsubであることを知っておく必要があります。0x .... 4 ...ニブルの下位3ビットはimm3フィールドであり、下位8ビットはアーム表記を使用したimm8フィールドであり、即時は1:100:11100100です。

それらのビットの上位5つ、i、imm3および上位imm8ビット11001を取り上げます。

つまり、ビットパターン11100100を取得し、1001ビット右にシフトします。

00000000011100100.....。

0000 0000 0111 00100.....。

定数は

0x00720000それは256だけずれています、それを理解する必要があります

うーん、私はあなたが言ったように0x1C20である10進数の7200をしている0x7200をやっていた

だからあなたのツールがあなたに伝えていることを見るツールはあなたに伝えている

A3 F5 E1 53

0xF5A3が必要なことはわかっているので、他の部分も交換されている可能性があります。

0xF5A353E1

私が得るものはどれですか:

f5a3 53e1 sub.w r3、r3、#7200; 0x1c20

同じt3エンコーディング

0xF5A3はsub.wsomething、r3、iビットが設定されたものを意味します0x53E1はsub.w r3、r3、somethingを意味し、定数は1:101:11100001です

上位5ビット11011は、11100001を右にシフトすることを意味します。0b1011ビットは11です。

0000000000011100001000

0000 0000 0001 1100 0010 0000 0000 0000

0x001C2000

あなたがサインフェルドを知るのに十分な年齢であるならば、これはヤダ、ヤダのカテゴリーに分類されます。
armv7-m TRMのA5.3.2(サム命令の修正された即時定数)。

01010それらは、2ビットが埋め込まれていることを示しています(これらの5ビットのmnopqは、2番目のビットnをスローし、シフト量としてmopqを残します。この場合は0b0010)。

そして彼らは...他のものを持っています、ヤダヤダ、そして

11111はシフト/パッドになります23ビット11110はパッド22です11101はパッド21ですが、その間の領域は線形ではありません。後方に作業を続けると、そこに魔法があります11100はパッド20、11011はパッド19、

そして、それは私たちが1以下の7immed8ビットの前に19のパッドを探していたものです。

0x00001C20

したがって、thumb2 12ビット定数エンコーディングは、従うのが少し面倒で、最適化できる興味深い定数がたくさんあります。imm3の上位ビットが設定されているこの特定のビットでは、4ビットまたは16のパターン/値が残ります。しかし、パディングしたい最大24ビットがあり、そこに到達することはできません。どうやら、iビットがゼロの場合は上から下にパディングし、iビットが設定されている場合は中間点からパディングするように見えます。

したがって、armv7trmのSUB命令を見てください。t3のエンコードは、実行しようとしていることと一致します。説明によると、サムシフト値はi:imm3:imm8です。これらのビットを同じマニュアルのセクションa.5に移動し、表a5-1を見てください。T3エンコーディングはimm12ではなくconstと呼ばれ、imm12エンコーディングは次のように見えます。そのa5-1テーブルの後の擬似コードで。

また、thumb2命令を見ているARM命令を使用していないことに注意してください。はい、ARMファミリの一部ですが、命令セットまたはモードが異なります。

于 2011-08-05T20:22:42.893 に答える