反编译出来的JAVA代码有问题!各位大哥帮忙看看!
我用反编译工具将.class文件反编译后有一个函数中的代码如下:
public String toString()
{
String s;
if(_items == 0 || _v == null)
return super.toString();
s = new String();
s;
JVM INSTR new #53 <Class StringBuffer> ;
JVM INSTR dup_x1 ;
JVM INSTR swap ;
String.valueOf();
StringBuffer();
"( ";
append();
toString();
s;
int i = 0;
goto _L1
_L3:
s;
JVM INSTR new #53 <Class StringBuffer> ;
JVM INSTR dup_x1 ;
JVM INSTR swap ;
String.valueOf();
StringBuffer();
_v[i].toString();
append();
toString();
s;
if(i == _items - 1)
continue; /* Loop/switch isn 't completed */
s;
JVM INSTR new #53 <Class StringBuffer> ;
JVM INSTR dup_x1 ;
JVM INSTR swap ;
String.valueOf();
StringBuffer();
", ";
append();
toString();
s;
i++;
_L1:
if(i < _items) goto _L3; else goto _L2
_L2:
s;
JVM INSTR new #53 <Class StringBuffer> ;
JVM INSTR dup_x1 ;
JVM INSTR swap ;
String.valueOf();
StringBuffer();
") ";
append();
toString();
s;
return s;
}
显然是不正确的,我试验了好几个反编译工具,这个函数反编译出来的都是这样。
请各位大哥出个主意。谢谢了!
分不够可以另开贴子给!
[解决办法]
UP
[解决办法]
路过,不是故意加上去了吧,哈哈,学习
[解决办法]
现在流行的反编译器内核都是JAD的,你不管换社么都一个样.编译不出来只能自己猜了,本来编译和反编译就不是等价的.
[解决办法]
JAVA现在的防反编译技术已经较为成熟了,有很多防反编译的工具,反编译出来的都是一些乱码。
建议你反编译一次看不懂就放弃算了,因为它有可能用了防反编译技术。
否则从成本上说是不划算的。
[解决办法]
正如前面 lixiaoxue85 兄所说,目前常见的反编译软件,其内核总共也没有几个,基本都是 JAD。
JAD 在反编译的时候,有时确实会出现一些异常的结果(排除混淆的原因),基本都是因为 try/catch、for、break 等流程控制语句造成的,如果你耐心多看看,多猜猜,基本也能猜出个大概。就算不能精确再现程序原貌,至少逻辑上大概差不多。
比如楼主这段程序,我看差不多应该是下面的样子:
public String toString() {
if(_items == 0 || _v == null)
return super.toString();
String s = "( ";
for (int i=0; i <_items; i++) {
s += _v[i];
if (i != _items-1)
s += ", ";
}
s += ") ";
return s;
}