jdgui反编译+javac编译=无源文件改动代码
首先我们要知道,打包好的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编译=无源文件改动代码的更多相关文章
- Linux源码与编译出的目标文件汇编代码的一致性问题
start_kernel是内核启动时比较重要的一个函数,然而我发现一个问题,我编译出来的目标文件中的汇编代码与C源码并不完全对应,这是怎么一回事呢? asmlinkage void __init st ...
- Android - 使用JD-GUI反编译Android代码
使用JD-GUI反编译Android代码 本文地址: http://blog.csdn.net/caroline_wendy Android程序出现Bug时,须要依据Bug寻找问题出错的地方; 须要使 ...
- (转载)反编译android的apk文件步骤
下面的方法我已经尝试过,完全可以成功,重点的步骤我在这里说一下 1.必须要有java环境,记得配置好环境变量 2.如果只查看class中的函数文件,只需要下载dex2jar和jd-gui 3.下载地址 ...
- 使用jd-gui+javassist修改已编译好的class文件
1.原因:因为公司代码管理不当导致源码丢失,只好已编译好的class文件进行修改 2.首先先在myeclipse中新建java项目并导入javassist 3.将需要修改的文件放到指定文件夹下 4.. ...
- jd-gui反编译报错// INTERNAL ERROR //
最近在反编译class和jar包的时候,发现部分class无法反编译出来,换了最新版本的jd-gui和多个版本都不行,只能放弃了 解决方案:GitHub上找Luyten这个工具反编译 luyten是P ...
- 【java】javac编译多个有依赖关系的java文件为class文件
历史文章: [jar]JDK将单个的java文件打包为jar包,并引用到项目中使用[MD5加密] [java]javac命令在win10不可用,提示javac不是内部或外部命令,也不是可运行的程序[解 ...
- jd-gui 反编译后去除注释
默认情况下,使用jd-gui反编译时会有注释. 行号注释 /* 521:502 */ 元信息 /* Location: D:\core-1.0.0.jar * Qualified ...
- 反编译C#的dll文件并修改,再重新生成dll
1.把dll文件导入到ildasm工具中,ildasm是由微软提供的.net程序反编译工具,位于“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A ...
- 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) 与 ...
随机推荐
- Java编程的逻辑 (5) - 小数计算为什么会出错?
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- .NetCore Cap 注册 Consul 服务发现
注册服务发现 需要使用Cap中的UseDiscovery方法 具体用法如下 var capConsulConfig = Configuration.GetSection("CapConsul ...
- Java ArrayList中对象的排序 (Comparable VS Comparator)
我们通常使用Collections.sort()方法来对一个简单的数据列表排序.但是当ArrayList是由自定义对象组成的,就需要使用comparable或者comparator接口了.在使用这两者 ...
- 【LOJ】#2495. 「AHOI / HNOI2018」转盘
题面 题解 考虑我肯定是从一个人出发,开始依次标记,而不会跳过某个人,因为如果我跳过了,那么我之后回来还需要标记它,比不上我等完它再一直走到最后(因为多了走一圈之后走回它的代价) 我们倍长整个序列,我 ...
- 【AtCoder】ARC093
C - Traveling Plan 相当于一个环,每次删掉i点到两边的距离,加上新相邻的两个点的距离 代码 #include <bits/stdc++.h> #define fi fir ...
- 010.MySQL-Keepalived搭配脚本04
vim /etc/keepalived/check_MySQL.sh #!/bin/bash pkill keepalived
- 使用Synchronized块同步方法
synchronized关键字有两种用法.第一种就是在<使用Synchronized关键字同步类方法>一文中所介绍的直接用在方法的定义中.另外一种就是synchronized块.我们不仅可 ...
- HDU3693 Math Teacher's Homework ---- 数位DP
HDU3693 Math Teacher's Homework 一句话题意 给定$n, k以及m_1, m_2, m_3, ..., m_n$求$x_1 \oplus x_2 \oplus x_3 \ ...
- 括弧匹配检验(check.cpp)
[问题描述] 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错 ...
- 【HDU5909】Tree Cutting(FWT)
[HDU5909]Tree Cutting(FWT) 题面 vjudge 题目大意: 给你一棵\(n\)个节点的树,每个节点都有一个小于\(m\)的权值 定义一棵子树的权值为所有节点的异或和,问权值为 ...