- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目,其中有一个文件夹“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/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!