有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我知道,如果我获取一些源代码,对其进行编译和反编译,原始源代码和最终源代码是不一样的,因为可能会以不同的方式(例如whilevsfor循环)说出相同的内容。换句话说,这个过程在某种程度上是多对一的,这意味着它不是可逆的

我的问题正好相反。如果我采用字节码,对其进行反编译,然后使用与最初使用的编译器完全相同的编译器重新编译,那么原始字节码和最终字节码是否会逐字节相同(忽略时间戳和非执行元数据)?如果不是一个字节一个字节地相等,那么它至少在逻辑上是等效的,还是进程可能会引入逻辑错误

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


共 (1) 个答案

  1. # 1 楼答案

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

    • 编译(如反编译)不是设计为双射操作的
    • 反编译器无法猜测使用了哪个编译器,以及使用了哪些选项来生成代码。类文件
    • 反编译不必像JSR中那样遵守合同或规范,也不能保证它会给出有效、可重复或经过认证的结果