python反编译class⽂件_反编译javaclass⽂件
在上⼀篇《java module解压及java常见打包格式》⼀⽂中,我们解包出了class⽂件,因为class⽂件是经过java编译过的。是⽆法直接进⾏查看的,不过这难不道⽼司机,打开 jd-gui ⼯具直接查看源码就⾏了,不过显然问题想的有点简单了,在jd-gui查看时,发现只有个别class⽂件可以查看,⼤部分class⽂件⽆法查看,本篇就先是推荐下CFR⼯具,再是总结下如何区分使⽤什么java版本编译出的class⽂件。
⼀、jd-gui搞不定的class⽂件
哥满怀激动的打开jd-gui,咖啡杯还是原来的咖啡杯,可却品不出了咖啡的味道,报错了。凌乱⼗秒,怎么办?新的⼯具,到了新⼯具CFR ,这个新产⽣的王者⽀持java9噢,具体命令如下:
虽然是不同的味道,但却品出了熟悉的配⽅,瞬间感觉碉堡了有⽊有。
⼆、如果通过class⽂件获取使⽤的java版本
java class⽂件⾥包含两个信息:minor_version、major_version,minor_version 和 major_version 的值分别表⽰ Class ⽂件的副、主版本。它们共同构成了 Class ⽂件的格式版本号。譬如某个 Class ⽂件的主版本号为 M,副版本号为 m,那么这个 Class ⽂件的格式版本号就确定为 M.m。
python转java代码
还是上⾯的图⽚,我在使⽤cfr⼯具获取源码之前,还执⾏了javap命令查看version信息,上⾯可以看到class⽂件的版本格式为54.0 ,这个号码和java版本之间是什么关系呢?看下图:
当然这个表有点⽼,没有列出最新的java9(JDK1.9),java10(JDK10)与class版本号的关系。⽽上图中的⼗六进制版本号的作⽤是什么呢?其实这部分就是前8位内容⾥的后四位,可能这句话会⾮常绕⼝。没关系,看下图:
前四位CA FE BA BE内容是固定的,后四位就表⽰JDK的主版本号与次版本号。通过主版本号计算得出其⼗进制值,别对应编译器版本,就可以知道其在什么版本下的java下编译出的class⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。