Декомпилированная Java из APK - циклы while, которые ничего не делают

Я декомпилировал apk и вижу много циклов while, которые возвращаются немедленно, а за ними следует другой код:

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

Если вы хотите создать этот код в декомпиляции, какой код Java вы бы написали, чтобы туда попасть?

Заметка. Процесс декомпиляции - это apktool -> baksmali -> smali -> dex2jar

РЕДАКТИРОВАТЬ

На самом деле я не могу получить исходный Java-байт-код от Android APK (по крайней мере, я не знаю, как). Возможно, мои инструменты плохо справляются с реверс-инжинирингом, но вот каков вывод 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;
}

1 ответ

Решение

Ваш байт-код является фрагментом скомпилированного оператора switch. В частности, это было реализовано с использованием разреженной команды Dalvik bytecode. Вы показываете только два случая переключения, где оба назначают mContextualTag а затем выполните return заявление. это return находится в одной точке программы, и переключатели переключаются на нее. Этикетки sswitch_9 а также sswitch_d может указывать относительные смещения от sswitch сама инструкция.

Другие вопросы по тегам