gpt4 book ai didi

java - 如何以编程方式识别生成的 .class 文件?

转载 作者:行者123 更新时间:2023-11-30 08:09:06 24 4
gpt4 key购买 nike

我正在开发一个分析 Java 应用程序的应用程序 (Windup)。我希望能够以编程方式识别 .class 文件是否是生成的,而不是由程序员编写和编译的。

作为一个人,我可以分辨,因为反编译的代码没有多大意义。它看起来有点像 C 的某种 Java 混合体。

我可以以某种方式实现识别生成的反编译代码。但是,反编译需要时间,我想跳过生成类的反编译。

有关什么是生成的 .class 文件的更多信息,请参阅 here .

有没有一种方法可以仅从标题中识别生成的 .class?或者可能是一些特定的字节码序列?

最佳答案

如前所述,任何合法的类文件都以魔数(Magic Number) 0xCAFEBABE 开头,因为它是 specified by the JVMS §4.1 .然而,文件以这个魔数(Magic Number)开头的简单事实并不能保证该文件代表一个已编译的 Java 类,因为任何人都能够创建这样的文件。

从你问题的字里行间来看,我假设你想知道一个类是由 javac 还是另一个编译器/运行时代码生成器生成的。这是不可能确定的,因为任何人都可以尽可能地模仿 javac。事实上,许多运行时代码生成器都试图尽可能地模仿 javac 编译器,因为它可以提高性能,因为 JIT 编译器可以识别 通常使用的一些模式javac.

如果您要分析的代码大量源自“普通 Java 代码”,您可以查找 byte code patterns that are not representable in the Java language .这样,您可以证明一个类不是由 javac 生成的,但您通常不能证明它是由它生成的。

关于java - 如何以编程方式识别生成的 .class 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com