zoukankan      html  css  js  c++  java
  • 【技术累积】【点】【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| 编译和反编译

    透彻了解:为什么有些语言可以被反编译?而有的不能?

  • 相关阅读:
    并发和并行的区别
    fiddler-打断点(bpu)
    fiddler操作
    fiddler手机抓包
    面试题1
    Linux查看日志常用命令
    HTMLTestRunner
    mysql数据库无法插入特殊字符报错
    mybatis解决属性名和数据库字段名不一致问题
    Vue路由的使用简单实例
  • 原文地址:https://www.cnblogs.com/andy1202go/p/9338692.html
Copyright © 2011-2022 走看看