【技术累积】【点】【java】【3】编译和反编译
闲聊
擦,打脸了,但打完了还是得继续写呗,水着水着看呗。
概述
理解的不深入,但是实用。
总而言之:编译,是将书写的代码翻译为机器能够理解的代码;反编译,则是相反的过程。
来源在于语言的等级,一般认为,自己写的,比如java这种,就是高级语言;编译的结果,比如汇编语言,就是机器能够理解的低级语言。
当然,更低级的是机器语言,是cpu可以直接解读的数据,对于人而言是完全的天书了吧。
理解
其实编译和反编译能进行到什么程度,说白了还是信息的丢失与否。
若编译丢失数据过多,反编译出来逻辑都看不懂;当然,信息丢失很少,但是全部乱掉(其实也是一种信息丢失了吧),也tm是废物(代码混淆了解一下)。
查了半天,还是没懂为啥会有反编译这种东西出来,最直观的想法还是想搞点事情吧,毕竟一个是东西可以编译,自然就可以反编译,另一个是不开源是吧,我反编译搞个开源的出来;
所以,事情就自然的再发展下去了,编译的时候加密,编译的时候混淆,各种骚操作。。
使用
之前看枚举的时候,发现博主通过反编译.class文件看了枚举的实质,刺激。
结果用jd-gui反编译了自己的枚举...
还是enum,根本没有extends Enum这回事儿
然后自己写个类继承Enum,直接报错咯,不能直接引用,看来1.5之后的应该是改了
public class TestClass extends Enum {
protected TestClass(String name, int ordinal) {
super(name, ordinal);
}
}
工具的话:jd-gui,各种ide
以后用到反编译的时候再补充吧。
引用
丰富了解:Java| 编译和反编译
透彻了解:为什么有些语言可以被反编译?而有的不能?