Java反编译后得到的不是Java源代码。

使用JD-GUI对.class文件进行反编译后,得到的大部分都是java源代码。但有一些核心的重要的方法,如解密方法,却不是可以看懂的源。有点像.class,又有点像汇编... 使用JD-GUI对.class文件进行反编译后,得到的大部分都是java源代码。但有一些核心的重要的方法,如解密方法,却不是可以看懂的源。有点像.class,又有点像汇编语言,里面有pop,push等关键字,想知道这是什么代码,如何写到.class文件中去的呢?又如何反编译为可识别的java 代码? 展开
 我来答
阿B牌儿洗衣粉
推荐于2017-12-16 · TA获得超过643个赞
知道小有建树答主
回答量:264
采纳率:0%
帮助的人:325万
展开全部
估计你得到的是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 调用实例方法
至于怎么还原成源码我就不知道了,因为一个程序可能由多种源码编译得到,不存在一对一关系
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式