美文网首页
可爱的字节码&修改

可爱的字节码&修改

作者: 摸摸脸上的胡渣 | 来源:发表于2020-01-28 21:37 被阅读0次

1.为什么要修改字节码

字节码是java多平台运行的根本原因,程序运行的状态和结果都由字节码决定。
所以控制了字节码,就控制了程序 —— 赤木刚宪
除了手写java代码,再编译成字节码外,还有哪些能够控制字节码的方法呢?

2.修改字节码的方式

2.1 ASM

ASM是修改字节码的工具库,拥有众多的API,其中总共可以分为三类。
加载字节码,修改字节码,替换字节码。分别对应ClassReader,Visitor,ClassWriter。
注意:ASM是去修改字节码,但是字节码比较晦涩难懂,有没有能够通过修改java代码的方式来更改字节码的工具呢?

2.2 Javasist

Javasist能够通过修改java代码来达到修改字节码的目的,与ASM类似,主要由两个组件,ClassPool和CtXXX(Ct代表compile-time),具体的写法,可以参考git,直接运行这个类即可。

public class JavassistTest {
    public static void main(String[] args) throws NotFoundException,
            CannotCompileException, IllegalAccessException, InstantiationException, IOException {
        ClassPool cp = ClassPool.getDefault();
//        cp.insertClassPath(new ClassClassPath(Base.getClass()));
        CtClass cc = cp.get("byteCode.Base");
        CtMethod m = cc.getDeclaredMethod("process");
        m.insertBefore("{ System.out.println(\"start\"); }");
        m.insertAfter("{ System.out.println(\"end\"); }");
        Class c = cc.toClass();
        cc.writeFile("/Users/wushuangxiaoyu/temp/demo/src/main/java/");
        Base h = (Base)c.newInstance();
        h.process();
    } 
}

https://github.com/LigthRain/demo/blob/master/src/main/java/byteCode/JavassistTest.java

相关文章

  • 可爱的字节码&修改

    1.为什么要修改字节码 字节码是java多平台运行的根本原因,程序运行的状态和结果都由字节码决定。所以控制了字节码...

  • 程序员练级攻略(2018):Java底层知识

    Java 字节码相关 首先,Java 最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成 Java 字节码。...

  • 四、Java探针技术

    对于agent,是在vm启动,执行方法前,将字节码修改的服务代理。 对于javassist,是修改字节码具体实现。...

  • spring aop源码实现分析

    AOP就是面向切面编程,我们可以从几个层面来实现AOP。 在编译器修改源代码,在运行期字节码加载前修改字节码或字节...

  • Java字节码修改 - javassist

    AOP的实现一般使用了动态代理和字节码修改,本文介绍使用javassist实现类的创建和修改 添加依赖 使用字节码...

  • 史上最全的ASM原理解析与应用

    ASM简介 ASM是一个操作Java字节码类库,其操作的对象是字节码数据,处理字节码方式是“拆分-修改-合并”将....

  • ASM框架学习(三)-FieldVisitor和MethodVi

    简介 FiedVisitor是用来在访问类的域字节码过程中创建域或者修改域字节码信息的;MethodVisitor...

  • 自定义Gradle插件

      最近在学习字节码插桩技术,利用字节码插桩技术,我们可以在编译时期对字节码进行修改,达到完成一些特殊需求,比如埋...

  • 字节码技术

    字节码技术应用场景 AOP技术、Lombok去除重复代码插件、动态修改class文件等 字节技术优势 Java字节...

  • JVM-Sandbox笔记 -- 增强的时机

    目标 了解Instrumentation的字节码修改机制了解Sandbox如何使用Instrumentation技...

网友评论

      本文标题:可爱的字节码&修改

      本文链接:https://www.haomeiwen.com/subject/iijmthtx.html