Java反编译后得到的不是Java源代码。
使用JD-GUI对.class文件进行反编译后,得到的大部分都是java源代码。但有一些核心的重要的方法,如解密方法,却不是可以看懂的源。有点像.class,又有点像汇编...
使用JD-GUI对.class文件进行反编译后,得到的大部分都是java源代码。但有一些核心的重要的方法,如解密方法,却不是可以看懂的源。有点像.class,又有点像汇编语言,里面有pop,push等关键字,想知道这是什么代码,如何写到.class文件中去的呢?又如何反编译为可识别的java 代码?
展开
展开全部
估计你得到的是java虚拟机指令,因为.class文件与java源代码不是一一对应的,但与虚拟机指令却是一一对应的,就像exe文件中的机器指令与汇编指令是一一对应的,要看懂这些代码可以参考java虚拟机指令集
追问
下面是一段示例,可以帮忙分析一下么?到底是怎么生成的?怎样还原成Java code
public String refresh(String s)
{
// Byte code:
// 0: aload_0
// 1: monitorenter
// 2: aload_0
// 3: getfield 54
// 6: ldc 101
// 8: aload_1
// 9: invokevirtual
.....
}
追答
肯定不是源码啊,这就是jvm指令
以上出现的助记符说明如下
aload_0 将第一个引用类型本地变量推送至栈顶
aload_1 将第二个引用类型本地变量推送至栈顶
monitorenter 获得对象的锁
getfield 获取指定类的实例域,并将其值压入栈顶
ldc 将int,float或String型常量值从常量池中推送至栈顶
invokevirtual 调用实例方法
至于怎么还原成源码我就不知道了,因为一个程序可能由多种源码编译得到,不存在一对一关系
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询