反编译出来的Java会出现逻辑错误,if else if,switch case等等会变成各种return for(;;) break,怎样恢复原逻辑呢
1.根据版本不同反编译出来的逻辑可能会有些不同,用jd-gui,以及jad两个同时反编译对比来进行逻辑矫正。
2.自己编写一些if else if switch语句,编译后再用工具反编译出来看结果是怎样的,就比如switch反编译的东西有6个条件,我自己写一个包含6个条件的switch反编译出来的位置会和源程序一样,这样就可以判断出哪些语句是再哪个case条件下执行的
涉及到内部类的时候会经常看到.access$800等让人找不到的函数
下面可以看一个示例
public calss Foo{
private int mValue;
public void run(){
Inner in=new Inner();
mValue=27;
in.stuff();
}
private void doStuff(int value){
System.out.printLn("value is "+value);
}
private class Inner{
void stuff(){
Foo.this.doStuff(Foo.this.mValue);
}
}
}
反编译出来后会
static int Foo.access$100(Foo foo){
return foo.mValue;
}
static void Foo,access$200(Foo foo,int value){
foo.doStuff(value);
}