2 lupangdelu lupangdelu 于 2016.03.21 21:21 提问

直接修改class文件可以吗? 1C

java项目找不到源代码了,但有部署后的class文件。现在只需要简单修改一个数字,如下面的代码:
if(a.equals("13"))
{
System.out.println("xxxxxxx");
}
现在只需要把13改成14,我试了反编译再修改再编译,但是跑不起来。我用编辑器直接打开class文件,找到13这个字符串,改成14,保存,替换掉原来的class文件,还是不行,请问大神,这个问题怎么解决?什么原因?

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.21 22:13
  基于以上原因,我们还是使用Java编译器编译标准的类文件才行,改了源文件后再重新编译替换旧版本的类文件。
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.21 22:11
  可以修改,前提是你需要完全掌握Java字节码文件的格式,按照规则来修改,否则Java虚拟机是无法识别你改过的class文件的。建议先研究下class文件吧,每一个字节都是有特定含义的。你这个修改可以对比修改前后class文件那些字节码不同,然后才知道改哪里,改的地方是什么含义。
wojiushiwo945you
wojiushiwo945you 你这个源代码13改为14,但是对应的字节码可不是这么简单的修改啊,你要知道这个源代码对应的字节码的位置。你可以对比下源代码编译后的类文件,区别在哪里!
一年多之前 回复
lupangdelu
lupangdelu 我只是把数字13改成了14,其他都没变,怎么也不可以?
一年多之前 回复
Marksinoberg
Marksinoberg   Ds   Rxr 2016.03.22 10:22

肯定是可以修改的,但是class是字节码,如果你要进行修改的话,必须要知道源代码编译过之后的字节码内容。希望对你有用哈图片说明

YtangH
YtangH   2016.03.22 19:29

改是可以的,但是你必须知道要改的源码编译后的字节码是哪些

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!