gpt4 book ai didi

java - 从未加载的 java 类中获取字节码

转载 作者:行者123 更新时间:2023-12-02 02:51:51 26 4
gpt4 key购买 nike

我有一个项目,其中有一个文件夹“input”,其中包含一些 java 文件(例如 test.java)。该文件夹不是源根目录,这是正确的。我只想用我的程序分析输入文件夹中的文件。一个目标是从输入文件夹中的文件中获取字节码并将其保存在字符串中。我读了很多关于从类(java代理,bcel)获取字节码的内容,但我不太清楚应该如何开始。您有什么想法和建议吗?

编辑: 我编译了文件并将其保存到字节数组中。我使用了有人提到的 javaassist 库。我的代码现在是:

    ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("Test");
byte[] b = cc.toBytecode();

System.out.println(Arrays.toString(b));

结果我得到:

[-54, -2, -70, -66, 0, 0, 0, 52, 0, 93, 10, 0, 25, 0, 52, 8, 0, 53, 7, 0,...,115]

如何从字节数组中获取“人类可读”形式的字节码,例如:

iconst_0      // 03
istore_0 // 3b
iinc 0, 1 // 84 00 01
iload_0 // 1a
iconst_2 // 05
imul // 68
istore_0 // 3b
goto -7 // a7 ff f9

有人有什么想法吗?

最佳答案

“字节码”指的是编译后的类文件。询问如何从 .java 文件获取字节码是没有意义的,因为没有字节码可供获取。您需要使用 javac、Eclipse 或类似工具来编译它们。然后您可以按照您想要的方式读取生成的 .class 文件。

编辑:要将类文件转换为人类可读的形式,您需要一个反汇编程序。 JDK 中包含一个名为 javap 的有限反汇编程序,因此最简单的方法就是使用它。或者,您可以使用Krakatau disassembler ,它支持比javap更高级的功能。

关于java - 从未加载的 java 类中获取字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43696557/

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