我有byte[]
数组,我知道它是类文件中方法的字节码序列。有没有办法对这个byte[]
数组进行选择性反编译?我无权访问实际的.class
文件。
我查看了Javassist库,它有很多方法(javassist.bytecode.CodeAttribute
类)但是我找不到这样的具体方法。
有人有线索吗?
我可以使用这个byte[]
数组并使用JVM参考手册为JavaByte代码助记符生成实际的字节码,但我需要生成反编译的Java源代码。
谢谢!
答案 0 :(得分:3)
我从来没有听说过处理单个方法的字节码。我想你会发现你无法用它做任何事情。你有什么字节码?你是从哪里得到的?您熟悉class file format和how methods are stored吗?例如,name of a method存储在the constant pool中,它是整个类文件的一部分,不属于任何一种方法。继续阅读方法格式,看看还有什么。我非常强烈地怀疑你要么没有你认为的那个byte[]
,要么你没有足够的信息去做任何事情。
免责声明:我只涉及字节码操作,所以不要采取我说的权威。相信规范所说的。
答案 1 :(得分:2)
仅使用特定方法的字节码生成有效的Java源是不可能的,因为所有名称都存储在类范围的常量池中。您可以期待的最好的方法是生成字节码助记符。