Androidリバース:Thumbの組み立て手順の詳細を再確認してください

主な内容
1.Thumb命令セットの詳細な説明2.Thumb
から直接アクセスされるレジスター3.Thumb命令セット
のコンポーネントの詳細な説明
4.Thumbとarmのステータスが変更されました
5.Thumbの一般的なアプリケーションシナリオ

1.サム命令セットの詳細な説明

•ARMプロセッサは、ARM命令セットとThumb命令セットの2つの命令セットをサポートします。

•ARM命令セットの長さは32ビットで、Thumb命令セットの長さは16ビットです。16ビットの外部データバス幅では、ARMプロセッサでThumb命令を使用する場合のパフォーマンスは、ARM命令を使用する場合よりも優れています。

•Thumb命令の意味:16ビットのデータバス幅を持つアプリケーションシステムと互換性があります。

2.Thumbが直接アクセスするレジスタ

3.Thumb命令セットのコンポーネント

•3.1。サムデータ処理命令

•3.2。ブランチジャンプの指示

•3.3。レジスタのロードおよびストア命令(単一レジスタ、複数レジスタ)

•3.4。その他の指示

•SWI:ソフト割り込み命令
命令形式は次のとおりです。

  SWI  immed_8
  其中:immed_8 8 位立即数,值为0~255 之间的整数。
  SWI 指令举例如下:
  SWI 1 ;软中断,中断立即数为0
  SWI 0x55 ;软中断,中断立即数为0x55
  使用SWI 指令时,通常使用以下两种方法进行传递参数,SWI 异常中断处理程序可以提供相关的服务,这两种方法均是用户软件协定。SWI 异常中断处理程序要通过读取引起软中断的SWI 指令。以取得8 位立即数。
  (A)指令中8 位的立即数指定了用户请求的服务类型,参数通过用寄存器传递。
            MOV R0,#34 ;设置子功能号为34
            SWI 18 ;调用18 号软中断
  (B)指令中的8 位立即数被忽略,用户请求的服务类型由寄存器R0 的值决定,参数通过其它的通用寄存器传递。
          MOV R0,#18 ;调用18 号软中断
          MOV R1,#34 ;设置子功能号为34
          SWI 0

 

4.サムとARMの状態変化

•ARM / Thumb間の状態切り替えは、特別な転送交換命令BXによって実現されます。
アセンブリ形式:BX {} Rm
機能:BX命令は、命令で指定されたターゲットアドレスにジャンプし、状態切り替えを実現します。Rmは、ターゲットアドレスを表すレジスタです。Rmの最下位ビットRm [0]が1の場合、プログラムはARM命令状態からThumb命令状態に強制的にジャンプします。Rmの最下位ビットRm [0]が0の場合、プログラムはThumb命令状態からARM命令に強制的にジャンプします。状態。

BX命令の例

  CODE32      ;ARM 程序段,32 位编码
  arm1   ADR R0,thumb1+1  ;把thumb1 所在地址赋给R0 ,末位R0[0] 置1 ,要跳转THUMB 指令集
  MOV LR,PC   ;设置返回地址
  BX R0     ;跳转
  ADD R1,R2,#2    ;返回地址处,第4 条指令
  CODE16  ;THUMB 程序段, 16 位编码
  thumb1  ADD R1,R3,#1   ;THUMB 程序
  BX LR ;跳转到返回地址处,执行第4 条指令

上記の分析例:状態切り替えを伴うサブルーチン呼び出しと戻り構造を説明しました。ARMプログラムセグメントがMOV LR、PCステートメントを実行すると、戻りアドレスがLRレジスタに保存されます。BXステートメントが実行されると、PCは次に実行されるステートメントを指します。このとき、PC(R15)の値は次のステートメントのADD命令のアドレスであり、ARM状態からR0への切り替えはR0のビット[0]に従って実現されます。親指の状態。このようにして、Thumbサブルーチンが呼び出されます。サブルーチンが呼び出された後、BX LR命令を使用して、サブルーチン呼び出しの戻りを実現し、ARM状態に切り替えます。

 

5.サム命令のいくつかのアプリケーション

•idaでThumb命令とARM命令を識別する方法

•CODE32はARMアセンブリ命令を使用することを意味し、CODE16はTHUMBアセンブリ命令を使用することを意味します。

•Thumbアセンブリの主なアプリケーションシナリオ:Soファイルを逆デバッグする場合、ARMシェルコードコードを作成する場合。

•以下は、armのシェルコードのアプリケーションです。

その他の記事については、私の公式アカウントをフォローし、一緒に学び、一緒に進歩してください。

 

おすすめ

転載: blog.csdn.net/c_kongfei/article/details/111246823