java - 处理反编译代码中的标签

标签 java label decompiling jad

我希望回到一个我之前失去源代码但已设法从用户​​那里获得编译版本的项目。我使用了一些反编译器来慢慢地将代码重新拼凑在一起,但仍然坚持使用两个最终的“标签”。

在过去三天尝试了一系列反编译器之后,我发现大多数反编译器发现这些片段更加困难,我来到这里作为最后的手段。我知道这是一个相当大的要求,尤其是因为缺少上下文并且它的存在是不寻常的,但如果幸运的话,有经验的人将能够理解这一点。

以下代码段包含“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 丢失”,因为它是在使用后声明的。使用方法也有助于消除该错误。

关于java - 处理反编译代码中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6347930/

相关文章:

Java future 和快速点积

Java - 传递 "this"时在对象属性中获取空值

java - 对因 Profile 而尚未创建的 bean 进行 Null 检查

java - Fernflower Java反编译器帮助

air - 反编译Adobe AIR应用程序

android - 给定 APK 文件,如何检测应用程序是否使用 React Native?

java - 并发HashMap迭代

javascript - 在 chart.js 中将 x 轴的标签倾斜一定程度

c# - 如何在C#中重写Java[继续<标签>和中断<标签>]?

android - 如何仅将自定义渲染器添加到某些特定布局?