注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

从class文件获得源码并重新编译  

2014-02-22 17:10:37|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      特殊情况下,手头上只有class文件,或者不清楚发布的版本具体是版本控制服务上的哪个版本了。这个时候就只好直接查看class文件了。之前的日志
http://ljhzzyx.blog.163.com/blog/static/383803122010522112537177/
有讲class文件编辑器,,java class file editor、java bytecode editor啥的(最近还试用过一个dirtyJOE),不过那个太高端了,一般情况下用不着,也不熟悉直接编辑class文件的哪些个命令。这个时候可以使用一些工具生成源码,然后再重新编译。从class反编译源码的工具有,cavaj java decompiler、DJ.Java.Decompiler、jd-gui等。其中cavaj java decompiler没有安装成功,DJ.Java.Decompiler和jd-gui得到源码了,但DJ.Java.Decompiler反编译的源码没有jd-gui反编译源码质量高。比如A.class.getClassLoader()这样的代码DJ.Java.Decompiler反编译成com/.../A.getClassLoader()这样明显有语法错误。并且一些注解类没有import进来(不知道是不是我不会配置DJ.Java.Decompiler)。默认情况下,jd-gui很强大。从生产服务器上拿下一堆class文件,用jd-gui打开某个class文件,jd-gui就把整个项目的包结构显示出来了,得到的源码也没有语法错误。得到源码后就可以修改然后使用javac命令重新编译了:
D:\...\jdk1.6.0_31\bin\javac -g -cp .;D:\...\jdk1.6.0_31\jre\lib\dt.jar;D:\...\jdk1.6.0_31\jre\lib\tools.jar;./lib/aopalliance-1.0.jar;...;./lib/spring-web-3.2.4.RELEASE.jar;./lib/spring-webmvc-3.2.4.RELEASE.jar;... com\...\controller\XxxController.java
      当然,习惯了ide的话,使用javac总是不熟悉以及效率低。我们可以借用ide,依赖的jar文件从服务器上发布的项目中都能获得,一般需修改的类对本项目的其他的类也有依赖,可以把所有class文件打成一个zip包,然后把这个zip包和之前所有的jar文件加到在ide里新建的java项目的build path里去。这里只要java项目就可以了,即使实际发布的项目是web项目,因为我们只要重新编译,不需要实际运行。然后把反编译的单个源码文件添加到java项目中,就可以在ide中编译源文件,直接利用ide检查语法错误。修改完后,如果ide是自动编译的话,就能得到重新编译的class文件了。

  评论这张
 
阅读(1752)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017