Декомпилированная 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
сама инструкция.