2

我有byte[]一个数组,我知道它是类文件中方法的字节码序列。有没有办法对这个byte[]数组进行选择性反编译?我无权访问实际.class文件。我查看了有很多方法(javassist.bytecode.CodeAttribute类)的 Javassist 库,但我找不到这样的特定方法。
有人有线索吗?

我可以byte[]使用 JVM 参考手册获取这个数组并生成 JavaByte 代码助记符的实际字节码,但我需要生成反编译的 Java 源代码。谢谢!

4

2 回答 2

3

我从未听说过处理单个方法的字节码。我想你会发现你不能用它做任何事情。你有什么字节码?你是从哪里弄来的?您熟悉类文件格式以及方法的存储方式吗?例如,方法的名称存储在常量池中,它是整个类文件的一部分,而不是任何方法的一部分。继续阅读方法格式,看看还有什么。我非常怀疑要么你没有你认为你拥有的东西,要么你byte[]没有足够的信息来做出任何事情。

免责声明:我只涉足字节码操作,所以不要把我说的话当作权威。相信规范所说的。

于 2012-05-12T15:54:28.207 回答
2

仅使用特定方法的字节码是不可能生成有效的 Java 源代码的,因为所有名称都存储在类范围的常量池中,等等。您可以期望的最好的结果是生成字节码助记符。

于 2012-10-27T05:01:26.367 回答