0

对于我们的项目,我们正在做某种逆向工程。为此,我们必须调试第三方 jar。

我尝试用 DJ、JAD 反编译那个 jar,但输出是带有编译时错误的源代码(比如方法原型中的返回类型是布尔值,但返回 int、循环中断等)。

现在,在这个损坏的源代码中,我想调试的 .java 文件很少。我想将这几个文件的源代码与jar中的相应类一起附加。

我用谷歌搜索了这个,但没有发现任何有用的东西。???

4

3 回答 3

2

阻碍是反编译器很可能无法用正确的行号重写源文件。因此,即使编译后的 lib 具有适当的行号信息,使用开箱即用的反编译输出也是行不通的。

即使没有源代码,您也可以在方法中设置断点(只要编译的类文件中有行号信息)。您甚至可以读取局部变量的值(同样,如果已使用调试信息编译了类),但是您必须查看反编译器输出并希望最好,反编译的方法足够接近真实的代码。

这并非不可能,但需要一些“手动”工作。

于 2011-01-05T09:13:15.507 回答
0

您没有提及您使用哪个 IDE 进行调试。如果尝试调试仅以类形式提供的类,Eclipse 会询问源代码。主要问题是 Andreas_D 已经提到了不匹配的行号。

我会尝试以下。

  1. 删除工作状态下所有未反编译的反编译java文件。
  2. 尝试使用类路径中的原始 JAR 编译每个工作的反编译 java 文件。这允许您生成具有正确行信息的新类文件以进行调试。
  3. 现在将 JAR 文件中的类文件替换为您已成功重新编译的类文件。还添加 java 文件。然后,您的调试 IDE 应该会自动识别源文件。
于 2011-01-05T13:13:59.287 回答
0

在 java 代码中附加类的源代码:

  • 右键单击所需的类

  • 转到打开声明[F3]
    类文件编辑器将打开单击附加源按钮

  • 浏览有源代码的jar

  • 点击<Ok>
    完成上述步骤后,Open Declaration 将打开有源代码的.class 文件。

于 2012-09-26T12:17:46.447 回答