bytebuddy源码解析

这篇博客详细解析了ByteBuddy的ByteBuddyAgent,包括Attacher、Installer、VirtualMachine和ByteBuddyAgent的核心功能。探讨了类型描述,如NamedElement、TypeDescription,以及ASM相关的Advice和Implementation。此外,还介绍了如何修改字节码,如classFileVersion、命名策略和注解过滤器。ByteBuddy是用于动态类型创建的强大工具,支持类的加载策略、字节码生成和修改。
摘要由CSDN通过智能技术生成

–> go to 总目录

bytebuddy 进阶

bytebuddy入门介绍篇,总结了bytebuddy的功能和使用。bytebuddy是什么,

比较有用

请看这里 源码解析详细版
这个写的不清晰,上面的更详细一点

一、ByteBuddyAgent

示例

在这里插入图片描述

博客
不同于使用-agent-jar参数的方式。bytebuddy自己实现了对Attach API的封装,可以直接将agent.jar加载。就是启动后主动attach到目标进程。

bytebuddy如何将类替换进内存。核心的函数是net.bytebuddy.agent.install方法。
可以先看 VirtualMachineInstrument完成扫盲。

1.1 Attacher 负责启动agent.jar

负责启动agent.jar包

只有一个方法install(),

  • 接受一个jvm的pid,和jvm建立连接,执行attach,返回一个 VirtualMachine
  • 执行loadagentpath或者loadagent加载agent.jar并触发premain或者domain方法
  • detach

在这里插入图片描述

1.2 Intaller Instrumention对象的载体

在这里插入图片描述
只要有有一个内部变量instrumention,用来包含对类的修改设定

很简单的getInstrumention

多了个权限策略的控制
在这里插入图片描述

premain agentmain

简单的赋值
在这里插入图片描述

1.3 VirtualMachine jvm平台的支持

支持的JVM,对JDK VirtualMachine的增强版
这里不需要细看

Resover获取 jvm平台信息

Resolver
在这里插入图片描述

OPENJ9

HotSpot

平台具体的attach处理,bytebuddy自己写的attach逻辑
在这里插入图片描述

1.4 ByteBuddyAgent(核心)

Provider

1. ProceessProvider

当前JVM pi的获取
在这里插入图片描述

2. AttachmentProvider

得到VirtulMachine用来attch的API

返回用来支持attach的Provider集合
在这里插入图片描述
内部实现了ACCESSOR,是对不同jvm的封装
在这里插入图片描述

用来attach的jvm的具体实现
在这里插入图片描述

3. AgentProvider

用来处理提供的jar文件或者agent.jar。

比如Agent-jar包中的Manifest文件有PreMain-class属性。
这个provider会
1 解析Manifest属性,设置到ByteBuddyAgent的属性去
2 读取agent的jar包
在这里插入图片描述

4.AttachmentTypeEvaluator

在这里插入图片描述

install()方法

在这里插入图片描述
在这里插入图片描述

其他 attach()方法

底层也是调用了install方法
在这里插入图片描述

二、类型的描述

2.1 NamedElement.java

net.bytebuddy.description 用来承载和操作类型
在这里插入图片描述

  • getActualName() sourcecode中的名称,没有就返回空""
  • getName() 运行中,byte code中变量的名称,例如int i=0i
  • getInternalName() 运行中,byte code中变量的名称,以classfile变量方式,比如 常量池的序号#1=int中的#1
  • isNa
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值