2

apk を逆コンパイルすると、すぐに戻って他のコードが続くだけの while ループが多数見られます。

while (true){
   return;
   if (!cond1){
     continue;
   }
   if (cond2){
     continue;
   }
}

逆コンパイルでこのコードを生成したい場合、どの Java コードを記述しますか?

ノート。逆コンパイルはapktool→baksmali→smali→dex2jar

編集

Android APK から元の Java バイトコードを実際に取得することはできません (少なくとも方法はわかりません)。私のツールが不十分なリバース エンジニアリング作業を行っている可能性がありますが、smali の出力は次のとおりです。

:goto_8
return-void

.line 40
:sswitch_9
const/4 v0, 0x0

iput v0, p0, Lcom/sec/android/app/camera/command/ContextualTagSelectCommand;->mContextualTag:I

goto :goto_8

.line 44
:sswitch_d
const/4 v0, 0x1

iput v0, p0, Lcom/sec/android/app/camera/command/ContextualTagSelectCommand;->mContextualTag:I

goto :goto_8

以下に対応します。

while (true)
{
  return;
  this.mContextualTag = 0;
  continue;
  this.mContextualTag = 1;
}
4

1 に答える 1

2

あなたのバイトコードは、コンパイルされた switch ステートメントのフラグメントです。具体的には、sparse switch Dalvik バイトコード命令を使用して実装されました。mContextualTagステートメントを割り当ててから実行する2 つの switch ケースのみを示していreturnます。これreturnはプログラム内の 1 つのポイントに配置され、スイッチ ケースはそこにジャンプします。ラベルsswitch_9とは、命令自体sswitch_dからの相対的なオフセットを示している場合があります。sswitch

于 2012-08-27T18:09:08.547 に答える