【问题标题】:How can I tell why/how two class files are different?我如何判断两个类文件为什么/如何不同?
【发布时间】:2020-11-25 16:29:02
【问题描述】:

我正在尝试重新创建一些旧源。我有两门课,一门来自我的新来源,一门来自丢失的来源。这两个类将反编译为相同的源。但是,类的位级别比较仍然显示出差异。如何判断导致这些差异的原因?

GC_

【问题讨论】:

  • 造成二进制差异的原因有很多,例如想到了不同的类格式版本。
  • @Henry 我正在使用相同版本的 JDK。
  • 不要将您的用户名放在帖子的末尾。它已经在您的帖子下方。

标签: java compiler-construction bytecode decompiling decompiler


【解决方案1】:

如果您想找出两个类文件之间的什么 不同,我建议在-roundtrip 模式下使用Krakatau disassembler。这会将类文件转换为人类可读的文本格式,该格式仍将 1:1 映射到类文件的确切二进制编码。然后您可以比较生成的文本文件,看看有什么不同。

【讨论】:

  • 这也可以,我发现我从 javap 获得了足够的信息。不过,谢谢。
  • javap 可以显示字节码的共同差异,但不会显示低级编码的某些差异。
  • 我会让历史解决它。不过,感谢您的回答。
【解决方案2】:

我发现只使用 javap 很有帮助。

我对两个类都运行了这个命令:

javap -version -l -v -p -c -s -sysinfo ClassName.class > temp.txt

然后我比较了这两个文件。这揭示了我正在寻找的差异。这是一个行号的事情。我发现 eclipse 的反编译器也很有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多