字节码框架ASM与AOP,ASM与BufferKnife/FastJSON,Hook机制与AOP,字节码插桩

2023-11-23 08:48

本文主要是介绍字节码框架ASM与AOP,ASM与BufferKnife/FastJSON,Hook机制与AOP,字节码插桩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

-- 字节码插桩-- https://juejin.im/post/5c886d4ce51d4560fd3ea9a7
 生成Android Dex编译过程: .java -> .class -> .dex
 插桩,就是在.class转为.dex之前,修改.class文件从而达到修改或替换代码的目的。对插桩的理解是:插入,替换代码。
 字节码修改工具。如AspectJ,ASM,javasisst。

- 函数插桩知识点:1.Android打包流程;2.Java字节码;3.自定义Gradle插件、Transform API;4.ASM;

-- ASM 与 Transform

一个简单易懂的transformDemo, 包括了如何支持增量更新, 如何使用ASM Core和ASM Tree Api, 具一定的封装性- https://github.com/YuTianTina/TransformDemo

> java字节码框架ASM
  ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
  ObjectWeb ASM轻量级的Java字节码处理框架,它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改类。ASM 提供了与 BCEL和SERP相似的功能,只有22K的大小,比起350K的BCEL和150K的SERP来说,是相当小巧的,并且它有更高的执行效率,是BCEL的7倍,SERP的11倍以上。
-- ASM包括主要三个类:
1、ClassReader : 负责从类文件中读取输入流,并依照固定的顺序调用 ClassVisitor 中声明的多个 visitorXxx的方法。
2、ClassVisitor : 抽象类,负责类内容的访问。
3、ClassWriter :负责生成byte[]字节流。ClassWriter是ClassVisitor的子类。

> ASM与AOP;使用ASM操作Java字节码,实现AOP原理;ASM与编译时注解
  BufferKnife与ASM,objectweb asm,一种.class的代码生成器的开源项目.
  用字节码来生成类;使用ASM动态生成Java字节码文件(.class) 或者 加载字节码后动态修改字节码,添加我们需要执行的代码,来模拟实现Spring AOP。
   使用ASM操作Java字节码,实现AOP原理- https://yq.aliyun.com/articles/4798#

> FastJSON使用到了ASM框架

 

> Hook机制与AOP

- Hook 框架 :Epic
Dynamic java method AOP hook for Android(continution of Dexposed on ART), Supporting 4.0~10.0- https://github.com/tiann/epic

神奇的Hook机制,一文读懂AOP编程- https://mp.weixin.qq.com/s/kEqH-mK3nebRbWfg6eQt2Q
- OOP 与 AOP 的区别
1.面向目标不同:简单来说 OOP 是面向名词领域,AOP 面向动词领域。
2.思想结构不同:OOP 是纵向结构,AOP 是横向结构。
3.注重方面不同:OOP 注重业务逻辑单元的划分,AOP 偏重业务处理过程中的某个步骤或阶段。

- 动态字节码生成
  Cglib + Dexmaker , Cglib 是一个强大的,高性能的 Code 生成类库, 原理是在运行期间目标字节码加载后,通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。由于是通过子类来代理父类,因此不能代理被 final 字段修饰的方法。
  但是 Cglib 有一个很致命的缺点:底层是采用著名的 ASM 字节码生成框架,使用字节码技术生成代理类,也就是通过操作字节码来生成的新的 .class 文件,而我们在 Android 中加载的是优化后的 .dex 文件,也就是说我们需要可以动态生成 .dex 文件代理类,因此 Cglib 不能在 Android 中直接使用。有大神根据 Dexmaker 框架(dex代码生成工具)来仿照 Cglib 库动态生成 .dex 文件,实现了类似于 Cglib 的 AOP 的功能。详细的用法可参考:将cglib动态代理思想带入Android开发-https://blog.csdn.net/zhangke3016/article/details/71437287

JavaPoet- https://github.com/square/javapoet
静态织入对系统无性能影响。但灵活性不够:APT;AspectJ;ASM;Javassist;DexMaker;ASMDEX;

https://img-blog.csdnimg.cn/20190228102429909.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NoYXJlVXM=,size_16,color_FFFFFF,t_70

这篇关于字节码框架ASM与AOP,ASM与BufferKnife/FastJSON,Hook机制与AOP,字节码插桩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/416735

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分