Java反编译 - >重新编译过程,安全吗?

时间:2015-07-31 15:04:07

标签: java compilation decompiling

我知道如果我采用一些源代码,编译并反编译它,原始和最终的源代码是不一样的,因为有可能以不同的方式说同一个东西(例如while vs {{1循环)。换句话说,这个过程在某种程度上是多对一的,这意味着它是不可逆的

我的问题是另一个方向。如果我接受字节码,反编译然后使用最初使用的完全相同的编译器重新编译它,原始字节码和最终字节码是否会逐字节(忽略时间戳和非执行元数据)?如果不是逐字节相等,那么它至少在逻辑上是等价的还是可能存在由该过程引入的逻辑错误?

我没有工具,但我可以回答我自己的第一个问题(逐字节相等),但不能回答第二个问题(逻辑等价),因此我在这里要求人们的经验。

1 个答案:

答案 0 :(得分:0)

我觉得反编译器无法输出100%准确的可重新编译代码,原因如下:

  • 编译(例如反编译)不是一种双向操作。
  • 反编译器无法猜测使用了哪个编译器以及用什么选项来生成.class文件。
  • 反编译不必遵守JSR中的合同或规范,也不保证它会提供有效,可重复或经过认证的结果。