私はsmaliの使用にかなり精通しているので、これが初心者の質問である場合は申し訳ありません.
コードにロギング呼び出しを挿入することを目的として、Apktool を使用して apk ファイルを smali に変換しています。
これを行うために、(新しいレジスタを追加するために) .locals を 1 つ増やしてから、すべてのレジスタを元の位置に戻そうとしています。
2 つのレジスター (long と double) を使用するパラメーターを移動しようとすると問題が発生します。それらを移動するコードを含めると、apk は再コンパイルされますが、エミュレーターで開きません。他のタイプを移動する場合、この問題は発生しません。
たとえば、以下は正常に動作します。68 行目に追加するmove-wide/from16 v6, p1
と、アプリが開かなくなります (以下は、.locals を 5 からインクリメントした後です)。
.method public breakerTheSecond(JLjava/lang/String;)V
59 .locals 6
60 .param p1, "pk" # J
61 .param p3, "ab" # Ljava/lang/String;
62
63 .prologue
64 move-object/from16 v8, p3
65
66 move-object/from16 v5, p0
67
68
69
70 .line 56
71 const/4 v0, 0x1
72
73 .local v0, "a":I
74 const/4 v1, 0x2
75
76 .line 58
77 .local v1, "b":I
78 invoke-virtual {v5}, Lcom/test/bbutton
/MyActivity;->getApplicationContext()Landroid/content/Context;
79
80 move-result-object v2
81
82 const-string v3, "test"
83
84 const/4 v4, 0x0
85
86 invoke-static {v2, v3, v4}, Landroid/widget
/Toast;->makeText(Landroid/content/Context;Ljava
/lang/CharSequence;I)Landroid/widg et/Toast;
87
88 move-result-object v2
89
90 .line 59
91 invoke-virtual {v2}, Landroid/widget/Toast;->show()V
92
93 .line 61
94 return-void
95 .end method
助けてくれてありがとう!