Android の arm32 組み立て手順をマスターしましょう

[特典: \[ ネットワーク セキュリティの大きな特典: 282G 学習リソース パックのエントリーおよびアドバンスト フルセットを無料で共有! \]]( https://mp.weixin.qq.com/s/BWb9OzaB-gVGVpkm161PMw

1. ARM32の共通命令の解析

キャリー加算命令付き ADC、ADD 加算命令、AND ロジックと命令、B 分岐命令、BIC ビットクリア命令、リターン付き BL 分岐命令、リターンと状態変更付き BLX 分岐命令、状態変更付き BX 分岐命令。CDPコプロセッサデータ操作命令、CMN比較逆数値命令、CMP比較命令、EOR排他的論理和命令、LDCメモリ→コプロセッサデータ転送命令 LDM複数レジスタロード命令、LDRメモリ→レジスタデータロード命令、MCRデータ転送命令ARM レジスタからコプロセッサ レジスタへの MOV データ転送命令、コプロセッサ レジスタから ARM レジスタへの MRC データ転送命令 MUL 32 ビット乗算命令 MLA 32 ビット積和命令 MRSはCPSRまたはSPSRの内容を汎用レジスタ命令に転送、MSRは汎用レジスタをCPSRまたはSPSR命令に転送、MVNデータ逆転送命令、ORR論理または命令、RSB逆減算命令、RSC逆減算命令配置ミスあり、SBC 位置ずれあり減算命令、STC コプロセッサ レジスタ書き込みメモリ命令、STM バッチ メモリ ワード書き込み命令、STR レジスタからメモリ データ ストレージ命令、SUB 減算命令、SWI ソフトウェア割り込み命令。

1 つの命令で複数のレジスタ値 (最大 16 個の汎用レジスタ) の転送を完了できます。連続するレジスタには "-" を使用し、それ以外の場合は "," を使用します。

2. キー組立説明書の使用

STMFD および LDMFD は、x86 アセンブリのプッシュおよびポップと同じ効果があります。

LDR R4、STARTは格納アドレスがSTARTのワードデータをR4 STR R5に読み込み、DATA1はR5をDATA1に格納します。LDR R0, [R1] メモリアドレス R1 のワードデータをメモリ R0 に書き込みます。 LDR R0, [R1, R2] メモリアドレス R1+R2 のワードデータをメモリ R0 に読み取ります。 STR, R0, [R1, #8] ! : R0 のワード データをメモリ アドレス R1+8 の記憶部に格納し、新しいアドレス R2+8 を R0 STR, R0, [R1, R2] に書き込みます! R0 のワード データをメモリ R1 の記憶部に格納します+R2 、新しいアドレス R2+R2 を R2 に書き込みます

Push{r0,r4-r7} r0,r4-r7 レジスタの内容をスタックにプッシュします Pop{r0,r4-r7}} r0,r4-r7 レジスタの内容をスタックからポップします

ポップには LDM 命令が、プッシュには STM 命令が使用されます。

3. ジャンプ命令の概要

B 無条件ジャンプ BL コネクション付き無条件ジャンプ BX ステート変更付き無条件ジャンプ BLX コネクションとステート付き無条件ジャンプ

4. ストア命令とレジスタ命令の詳細説明

LDR: メモリからレジスタにデータをロード --LoadLDR R8, [R9, #04]: R8 はデータをロードするレジスタであり、ロード値は R9+0x4 が指すストレージ ユニットです。

STR: レジスタのデータをメモリに保存します --storeSTR R8, [R9,#04]: R8 レジスタのデータを R9+0x4 が指す記憶装置に保存します

LDM: メモリのデータをレジスタリストにロード → LDM R0、{R1-R3} R0 が指すストレージユニットのデータを R1、R2、R3 レジスタに順番にロードします

STM: レジスタリストのデータを指定されたメモリに格納します。 PUSH: レジスタの値をスタックにプッシュします。 POP: スタックの値をレジスタにプッシュします。 SWP: レジスタとメモリの間でデータを交換します。 SWP R1、R1 [R0] は、 R1 レジスタの内容は、R0 が指すメモリ位置と交換されます。

5. 詳細を登録する

ARM32 アセンブラは ARM レジスタを事前定義しており、すべてのレジスタ名とコプロセッサ名は大文字と小文字が区別されます (Ro-R15 および r0-r15)。

a1 ~ a4 (パラメータ、結果、または一時レジスタ、r0 ~ r3 と同じ)

v1~v8(変数レジスタ、r4~r11と同じ)

sb および SB (静的ベースレジスタ、r9 と同じ)

sl および SL (スタック制限レジスタ、r10 と同じ)

fp および FP (フレーム ポインタ、r11 と統一)

ip および IP (プロセス呼び出し中間一時レジスタ、r12 と統合)

sp および SP (スタック ポインタ、r13 で統一)

lrおよびLR(接続レジスタ、r14と統一)

pcとPC(プログラムカウンタ、r15で統一)

cpsr および CPSR (プログラム ステータス レジスタ)

spsr および SPSR (プログラム ステータス レジスタ)

f0 ~ f7 および F0 ~ F7 (FPA レジスタ)

s0 ~ s31 および S0 ~ S31 (VFP 単精度レジスタ)

d0 ~ d15 および D0 ~ D15 (VFP 倍精度レジスタ)

p0 ~ p15 (コプロセッサ 0 ~ 15)

c0 ~ c15 (コプロセッサ レジスタ 0 ~ 15)

6. 関数内でアセンブリを使用する場合の注意点

1. 関数パラメータの数が 4 未満の場合、パラメータはレジスタ R0 ~ R3 を介してサブルーチン間で渡されます。パラメータの数が 4 を超える場合、冗長パラメータはデータ スタック、スタックの順序、およびパラメータの順序 逆に、サブルーチンがリターンする前に R0 ~ R3 の値を復元する必要はありません。

2. サブルーチンでは、R4 ~ R11 を使用してローカル変数を保存します。スタックに保存する必要がある場合は、サブルーチンが戻る前にこれらのレジスタを復元する必要があります。R12 は一時レジスタであり、保存する必要はありません。使うときはそれ。3. R13 は SP で示されるデータ フレーム ポインタとして使用され、R14 はサブルーチンが戻るときにアドレスを保存するために使用される LR で示されるリンク レジスタとして使用され、R15 は PC で示されるプログラム カウンタとして使用されます。4. ATPCS では、スタックがフル デクリメント スタック FD であると規定されています; 5. サブルーチンは 32 ビット整数を返し、返すために R0 を使用します; 64 ビット整数を返す場合、下位ビットを返すために R0 を使用し、下位ビットを返すために R1 を使用します。上位ビットを返します。

ネットワークセキュリティの成長ロードマップ

この方向性は、初期段階で開始し、いくつかの基本テクノロジーを習得し、ハッキングするためのさまざまな既製ツールを入手するのが比較的簡単です。ただし、スクリプト キディからマスター ハッカーに変わりたい場合は、この方向に進むほど、より多くのことを学び、習得する必要があります。ネットワーク セキュリティを学ぶために取るべき方向は次のとおりです。

# ネットワークセキュリティの学習方法

上記では技術的な分類と学習ルートを紹介しましたが、いくつかの学習方法を次に示します。

## ビデオ学習

无论你是去B站或者是油管上面都有很多网络安全的相关视频可以学习,当然如果你还不知道选择那套学习,我这里也整理了一套和上述成长路线图挂钩的视频教程,完整版的视频已经上传至CSDN官方,朋友们如果需要可以点击这个链接免费领取。网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

おすすめ

転載: blog.csdn.net/qq_44005305/article/details/129265535