
Java
我得先跟你透露个实情:
Java反编译这码事啊,就跟惦记着前任似的,不会有啥好下场。这么来讲吧,虽然能把代码反编译出来,可你要是想拿这个反编译的成果进行二次开发,还盼着它能像原来那样稳稳当当的,那你可就太天真了。老哥我来给你好好讲讲吧。首先,你要是拿到一个.class文件,确实有不少工具可以用来反编译,像jad、
Javap、CFR这些。这些工具就是把字节码转化成
人类能看得懂的内容。别看名字起得挺酷炫,其实,它们就像是代码的碎纸机。你确实能从里面找出些代码来,不过这些代码的质量啊,就好比是三天前的外卖,能吃,但可不敢保证吃了不会闹肚子。
Javap已经被收录到我的技术网站了,我的技术网站是ddkk.com,这里面有500套技术系列教程、1万多道
面试八股文、BAT
面试真题、简历模板、工作经验分享、架构师成长之路等等,啥都有,欢迎大家收藏和转发。要知道,
Javap是个官方工具,它输出的是JVM的字节码指令,并非真正的源码。你要是真想看代码,还是得用像CFR这样的反编译器,反正效果比
Javap要好得多。看到这儿你可能就会说:哎,我既然能反编译出来,那能不能给它加点东西然后再编译回去?,先别着急,这里面有坑。你要是想在现成的.class文件里添加方法,说实话,从理论上来说这是可行的,但要看你具体怎么做。要是你想在反编译后的源码里直接加个方法,然后再编译回去,这就好比你上街随便买了辆车,装上赛车
发动机,然后还想开到200迈一样。怎么说?理论上能行得通,但实际操作起来,分分钟就能把系统搞崩溃。因为.class文件和.
Java文件虽然看起来像是一回事儿,但实际上,它们就像亲戚关系一样,彼此之间的依赖关系复杂得很。就像你那个好几年没联系的表哥,突然找你借钱,虽然有亲戚关系,但真要这么做起来,麻烦事儿可不少。你以为直接用
Javap把字节码指令弄出来,修改一下加个方法,然后再用工具转换回去就万事大吉了?理论上是没错,但现实可没这么简单。字节码是给JVM用的,咱们
人类不太适合直接跟它打交道。JVM可不是你家养的小猫,随便喂点东西就能吃。你加个方法,得确保这个方法能和原来的字节码关联得上,还得保证运行的时候不出问题。