处理反编译代码中的标签

| 我希望返回到一个项目,该项目我之前已经失去了源代码,但是已经设法从用户​​那里获得了编译版本。我曾经使用过一些反编译器来将代码缓慢地重新组合在一起,但是被两个最终的“标签”所卡住了。 在花了三天的时间尝试各种反编译器之后,才发现他们当中的大多数人发现这些摘录甚至更多是我的奋斗之路,这是我最后的选择。我了解到这是一个很大的要求,尤其是在缺少上下文的情况下,并且它所呈现的内容是不寻常的,但是幸运的是,有经验的人将能够理解这一点。 以下代码段带有\'label337 \',我不知道如何解决。我知道它们是各种各样的指针,但我没有想到如何重新排列代码。 JD-GUI产生的输出。 http://pastebin.com/mVNksm13 以下代码段带有\'label711 \',但我也不知道该如何处理。尽管从上下文中大量删除了它,但这是一个完整的条件,尽管我不知道它会产生多大的意义。 JD-GUI产生的输出。 http://pastebin.com/5MLFxHPb 我想再次重申,我知道这是多么重要的请求,但是在厌倦了Java或反编译器的眼光后,我来到这里是希望在这种情况下可以提供比我已经知道的更多的信息。 编辑: 我要反编译的jar严重依赖于我可以访问的另一个jar。在反编译期间以某种方式指向类所依赖的jar会产生更好的输出吗?我尝试搜索如何在反编译器中链接到此类依赖关系,但一无所获。     
已邀请:
        如果我能正确理解您的问题,那么您正在寻找重构的代码。中断类似于GOTO语句。重构此代码的最简单方法是使用方法。 您有一个长的if / else语句,如果将其移至方法中,则将允许您使用return语句。这是第一个示例的简化形式
for (final TileInfo t : this.myTiles) {
  if (rsi != null) {
    //do something
  } else if (rso != null) {
    //if some condition; break label337;
  }else{
    //do something else
  }
}
label337: for (TileInfo t : fallenTiles) {         
}
而不是创建新方法来执行逻辑
private void CheckMyConditionsMethod(MyParameters obj){
    if (rsi != null) {
        //do something
    } else if (rso != null) {
        //if some condition return;
    }else{
        //do something else
    }
    fallenTilesMethod(fallenTiles);
}

private void fallenTilesMethod(ArrayList<TileInfo> fallenTiles){
   for (TileInfo t : fallenTiles) {         
   }
}
现在您的代码缩短为
for (final TileInfo t : this.myTiles) {
      CheckMyConditionsMethod(myobj);
}
同样在您的原始情况下,您很可能会遇到编译错误“标签label337丢失”,因为它是在使用后声明的。使用方法也将有助于消除该错误。     
        看起来您的反编译器搞砸了,并将标签放置在错误的位置。至少对于第一个示例,如果将label337移到发生中断的最外层for循环中,则它应该可以正常编译并执行您期望的操作。对于另一个,您将必须将if块修改为最后一个中断附近才能进行编译。 这是有关如何使用带标签的中断的简短教程:http://download.oracle.com/javase/tutorial/java/nutsandbolts/branch.html     

要回复问题请先登录注册