ASM插桩

作者: 柚子_922d | 来源:发表于2021-06-01 14:40 被阅读0次

https://blog.csdn.net/u013144863/category_10236998.html

Android ASM 插桩实践

1.什么是 ASM?一个字节码操作库,它可以直接修改已经存在的 class 文件或者生成 class 文件。

 ASM 的核心 API:

ClassReader:对具体的 class 文件进行读取与解析

ClassVisitor、AdviceAdapter:可以访问class文件的各个部分,比如方法、变量、注解等,用于修改 class 文件。

ClassWriter:将修改后的class文件通过文件流的方式覆盖掉原来的 class 文件,从而实现 class 修改;

2.基础 Java 字节码知识

字节码描述符

对于基本数据类型(byte char double float int long short boolean)以及代表无返回值的void类型都用一个大写字符来表示,对象类型则用字符“L”加对象的全限定名来表示(即把包名所有“.”换成了“/” ),一般对象类型末尾都会加一个“;”来表示全限定名的结束。

3.虚拟机执行字节码基础

虚拟机的内存分为堆内存与栈内存。堆内存所有线程共享,栈内存则线程私有,重点解释下栈内存。

总之我们知道每个线程对应的中会有若干栈帧,每个栈帧对应着相应的方法

4.一款 IDEA 的插件 ASM Bytecode Outline。它可以自动给你生成对应的 ASM 操作代码。

IDEA Java 工程:https://github.com/changer0/JavaASMDemo

Android 工程:https://github.com/changer0/ASMInjectDemo

Android Transform API

1.第三方插件在将编译后的类文件转换为 dex 文件之前对 .class 文件进行操作。

2.Transform API 

getName():用于指定 Transform 的名字,对应了该 Transform 所代表的 Task 的名称

isIncremental():方法指明是否支持增量编译。

getInputTypes():用于指定 Transform 的输入类型,可以作为输入过滤的一种手段。在 TransformManager 中定义了很多类型:

    CONTENT_CLASS // 代表 javac 编译成的 class 文件(一般用它)

    CONTENT_JARS

    CONTENT_RESOURCES // 这里的 resources 单指 java 的资源

    CONTENT_NATIVE_LIBS

    CONTENT_DEX

    CONTENT_DEX_WITH_RESOURCES

    DATA_BINDING_BASE_CLASS_LOG_ARTIFACT

getScopes():用于指定 Transform 的作用域。同样在 TransformManager 中定义了很多类型,常用的是 SCOPE_FULL_PROJECT,即代表所有 Project。

transform(TransformInvocation)




Android Gradle 插件基础

1.Gradle 构建生命周期

 Gradle 为了管理这些 Task 会在任何一个 Task 执行前构建一个 DAG 图(Directed Acyclic Graph,有向无环图)

2.自定义插件

特别:buildSrc 模块

相关文章

  • ASM插桩

    https://blog.csdn.net/u013144863/category_10236998.html A...

  • Gradle插件<第三篇>:字节码插桩技术-替换类

    字节码插桩技术有:Javassist、BCEL、ASM,它们的执行速度比对图如下: ASM的执行速率要比Javas...

  • Android隐私合规

    目录介绍 前言 合规检查检测隐私API方案 合规整改 合规解决方案-ASM插桩什么是ASMASM 插桩可以做什么?...

  • ASM字节码插桩

    个人博客http://www.milovetingting.cn ASM字节码插桩 前言 热修复的多Dex加载方案...

  • ASM代码插桩监控方法耗时

    前言 我们会通过ASM+Transform 代码插桩来实现方法耗时监控 另外 用到了一个比较好用的插件ASM By...

  • ASM插桩:学完ASM Tree api,再也不用怕hook了

    背景 对于ASM插桩来说,可能很多人都不陌生了,但是大多数可能都停留在core api上,对于现在市面上的一些插桩...

  • JMCR 字节码插桩(一)

    简述 本文内容将介绍 Java 字节码相关知识,以及如何通过 javaagent 技术加上 ASM 框架进行插桩。...

  • ASM字节码插桩详解

    1、ASM概述 ASM是一个功能比较齐全的java字节码操作与分析框架,通过ASM框架,我们可以动态的生成类或者增...

  • 【Android】函数插桩(Gradle + ASM)

    前言 第一次看到插桩,是在Android开发高手课中。看完去查了一下:“咦!还有这东西,有点意思”。 本着不断学习...

  • Android ASM插桩全面深度解析

    简介 ASM插桩在网上其实已经有很多资料了,我之所以再写这篇文章呢,一是因为好久前学习的ASM,现在已经忘的差不多...

网友评论

      本文标题:ASM插桩

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