首先我们要知道,打包好的Java程序中都是编译好的字节码文件(*.class)。这些class文件会在执行的时候被载入到JVM中。

若想替换掉某一个类,那么仅仅须要将该类的源代码又一次编译然后再替换之前的class文件就可以。

那么假设没有源码怎么办呢?这个时候我们能够用反编译软件来反编译class文件,反编译软件中比較有名是jd-GUI。能够从官网上下载到最新的版本号

我这里使用的是jd-gui-0.3.6.windows

下载完之后将class文件或者jar包拖到jd-gui的窗体中就能够看到反编译出来的代码了~NICE。这样第一步就做好了

第二步:我们能够将代码复制出来。比方在该class目录中创建一个xxx.java文件并将xxx.class反编译出来的代码拷贝到当中。

第三步:我们将代码改动一下保存,而且用javac编译一下

这里补充一下怎样使用javac来编译java文件

普通情况下直接javac + 文件路径 就能够了。可是若存在一些依赖关系就须要使用 -classpath这个选项了

比方 我们这里来编译 一个名为 ImportUI.java的文件,解压jar包之后的文件夹格式例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM0NTI4Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

这里能够看到gmsimport目录下就是存放class文件的地方,它就是这个项目的classpath。所以在编译当中的文件时须要加上这个目录

另外我们还看到了2个jar包,对于jar包的引用我们须要另外写。比方我们这里来编译一个ImportUI.java文件(当前文件夹就在)

javac -classpath D:\gmsimport;D:\gmsimport\DatePicker-V0.99-2006.09.01.jar; com\test\gmslic\ImportUI.java

这样就编译好了,且生成的class文件默认的路径就是和该java文件同样的文件夹

试试用java命令来启动一下,也须要带上-classpath选项哦~

java -classpath D:\gmsimport;D:\gmsimport\DatePicker-V0.99-2006.09.01.jar; com.test.gmslic.ImportUI

已经是改动后的效果了吧?NICE,最后打个包就能够替换之前的版本号了~

对了。上面的-classpath也能够简写成-cp~

jdgui反编译+javac编译=无源文件改动代码的更多相关文章

  1. Linux源码与编译出的目标文件汇编代码的一致性问题

    start_kernel是内核启动时比较重要的一个函数,然而我发现一个问题,我编译出来的目标文件中的汇编代码与C源码并不完全对应,这是怎么一回事呢? asmlinkage void __init st ...

  2. Android - 使用JD-GUI反编译Android代码

    使用JD-GUI反编译Android代码 本文地址: http://blog.csdn.net/caroline_wendy Android程序出现Bug时,须要依据Bug寻找问题出错的地方; 须要使 ...

  3. (转载)反编译android的apk文件步骤

    下面的方法我已经尝试过,完全可以成功,重点的步骤我在这里说一下 1.必须要有java环境,记得配置好环境变量 2.如果只查看class中的函数文件,只需要下载dex2jar和jd-gui 3.下载地址 ...

  4. 使用jd-gui+javassist修改已编译好的class文件

    1.原因:因为公司代码管理不当导致源码丢失,只好已编译好的class文件进行修改 2.首先先在myeclipse中新建java项目并导入javassist 3.将需要修改的文件放到指定文件夹下 4.. ...

  5. jd-gui反编译报错// INTERNAL ERROR //

    最近在反编译class和jar包的时候,发现部分class无法反编译出来,换了最新版本的jd-gui和多个版本都不行,只能放弃了 解决方案:GitHub上找Luyten这个工具反编译 luyten是P ...

  6. 【java】javac编译多个有依赖关系的java文件为class文件

    历史文章: [jar]JDK将单个的java文件打包为jar包,并引用到项目中使用[MD5加密] [java]javac命令在win10不可用,提示javac不是内部或外部命令,也不是可运行的程序[解 ...

  7. jd-gui 反编译后去除注释

    默认情况下,使用jd-gui反编译时会有注释. 行号注释 /* 521:502 */ 元信息 /* Location:           D:\core-1.0.0.jar * Qualified ...

  8. 反编译C#的dll文件并修改,再重新生成dll

    1.把dll文件导入到ildasm工具中,ildasm是由微软提供的.net程序反编译工具,位于“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A ...

  9. javac编译多个java文件以及-cp、-classp、-sourcepath

    //编译多个文件 javac  path_of_file_a/a.java path_of_file_b/b.java path_of_file_c/c.java   -cp(classpath) 与 ...

随机推荐

  1. Windows 7 x64环境下SDK Manager闪退的解决方法

    1.下载并解压:http://dl.google.com/android/adt/adt-bundle-windows-x86_64-20140702.zip 2.安装JDK,否则SDK Manage ...

  2. spring boot + vue + element-ui

    spring boot + vue + element-ui 一.页面 1.布局 假设,我们要开发一个会员列表的页面. 首先,添加vue页面文件“src\pages\Member.vue” 参照文档h ...

  3. Yeoman generator

    使用Yeoman generator来规范工程的初始化 前言 随着开发团队不断发展壮大,在人员增加的同时也带来了协作成本的增加:业务项目越来越多,类型也各不相同.常见的类型有基础组件.业务组件.基于R ...

  4. js跨越请求的2中实现 JSONP /后端接口设置运行跨越header

    由于浏览器同源策略,a域名的js向b域名ajax请求会被禁止.JS实现跨越访问接口有2中办法. 1.后端接口设置允许跨越的header头. //header('Access-Control-Allow ...

  5. linux密码暴力破解机

    linux 密码保存在 /etc/shadow shadow 文件的保存格式 python:$$mWSyC6Pv$hpMreQT77R9ML/Xx1QnRAow1tUTDjIowaTssV7bZw9S ...

  6. pymysql模块 执行sql封装

    封装pymysql模块执行sql class HandCost(object): """ 处理数据库中的数据 """ def __init_ ...

  7. 迈出第一步,Hexo博客搭建

    很早之前看到别人的博客就总想着自己之后也要搭一个,最近突然来了干劲,就开始搭起了博客.不过搭博客还真是一个累活,失败了不下十次,用了好几天的时间,感觉自己在浪费时间,但是看到现在博客终于能用了,非常开 ...

  8. 重读redux源码(一)

    前言 对于react技术栈的前端同学来说,redux应该是相对熟悉的.其代码之精简和设计之巧妙,一直为大家所推崇.此外redux的注释简直完美,阅读起来比较省事.原本也是强行读了通源码,现在也忘得差不 ...

  9. notepad++ 如何选择10000行-20000行之间的文本?

    最近要上传导入一批数据,但是数据太多,一次上传不了,所以就要分批上传,而且数据全部在一个txt里面,这时就想一次复制一部分出来导入,直到导入完成,但是问题来了,数据太多,选择1到10000行,鼠标要拉 ...

  10. 喵哈哈村的魔法考试 Round #6 (Div.3) 题解

    有任何问题 直接联系QQ:475517977 喵哈哈村的代码传说 第一章 冒泡排序 第一题就是排序嘛,在ACM/OI竞赛中,我只推崇一种排序方法,就是直接调用algorithm里面的sort函数. # ...