我反编译了一个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;
}
答案 0 :(得分:2)
您的字节码是已编译的switch语句的片段。具体来说,它是使用稀疏开关 Dalvik字节码指令实现的。您只显示两个切换案例,其中两个都分配给mContextualTag
,然后执行return
语句。这个return
被放置在程序中的一个点上,并且开关盒跳转到它。标签sswitch_9
和sswitch_d
可能表示sswitch
指令本身的相对偏移量。