【Galois工具开发之路】关于ClassFileTransformer的注意点

关于ClassFileTransformer

该接口是javaagent的 Instrumentation.addTransformer 方法的入参之一,用于给加载的类添加一个类转换器,确保在类进入main方法之前,对类进行字节码插桩。

接口函数说明

该接口只有一个方法,即

byte[]	transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer);

接口中明确说到,当你不需要对一个类的字节码进行处理的时候,就返回 null 或者 new byte[0]。而如果需要处理的时候,就返回一个新的字节数组。

注意点说明

当你只有一个 ClassFileTransformer 实现类时,上面的处理逻辑是没问题的,可如果你添加了多个 ClassFileTransformer 的时候,就需要更新一下逻辑。多个 ClassFileTransformer 会链式调用,上一个转换器处理后的字节码数组,会变成 classfileBuffer 入参给到下一个转换器。

也就是说,你的某个转换器,如果不需要处理某个类的字节码数组时,不能再返回 null 或者 new byte[0],这样会导致转换器链式调用结束后,其它转换器转换后的字节码数组被覆盖,这时候是应该要返回入参的 classfileBuffer 属性的。

示例说明

在这里插入图片描述

Galois热部署工具

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java Agent是Arthas使用的技术,是Skywalking使用的技术,是一份十分重要的技术。 课程的稀缺性在此之前,市面上并没有针对Java Agent进行系统介绍的课程。 通过搜索引擎查找,会发现与Java Agent相关的内容大多是个人知识总结分享的内容。这些内容有如下特:内容质量不一详略程度不一学习难度千差万别总体上来说,学习者很难有一个整体认知、系统学习的过程。 课程的设计目标 在构思课程内容时,本课程带有以下目标:课程学习梯度:从简单到复杂,让学习者有一个循序渐进的理解过程。构造完整、统一的知识体系:不是零散的知识堆砌,而是有一个统一的贯穿始终的知识框架。具有可操作性的代码示例,不只是讲概念,更注意于实践。课程内容安排 本课程通过四章内容对Java Agent相关知识进行讲解:第一章,介绍Agent Jar的三个组成部分:Manifest、Agent ClassClassFileTransformer。第二章,介绍Agent Jar的两种启动方式:从命令行启动和使用Attach机制启动。第三章,介绍如何利用Instrumentation API来实现Agent Jar的功能。第四章,Java Agent的应用与技巧。 通过本课程的学习,让同学们更好地建立起一个完整的知识体系:  讲师介绍我叫刘森,南京师范大学研究生毕业,2015年获得信息系统项目管理师(高级),2014年获得系统集成项目管理工程师(中级)。 目前,我的课程都是围绕着“Java字节码”技术展开: 《Java Agent基础篇》是在一个运行JVM当中提供修改字节码的机会《Java ASM系列》(免费课程)是一个操作字节码的类库《Java 8 ClassFile》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程” 因此,我对字节码技术有较为深入的研究和理解,大家想学习字节码的技术可以找我:字节码技术找刘森,轻松学习又省心~~~ 
要在Linux上安装Galois库,您可以按照以下步骤进行操作: 1. 首先,确保您已经在Linux系统上安装了Python。 2. 打开终端,并使用以下命令安装pip,这是Python的包管理器: ``` sudo apt-get install python3-pip ``` 3. 安装完成后,使用以下命令来安装Galois库: ``` pip3 install galois ``` 4. 等待安装完成后,您就可以在Python代码中导入并使用Galois库了。 请注意,这里假设您使用的是Python 3。如果您使用的是Python 2,请将上述命令中的pip3替换为pip。 引用 提供了有关Galois库的官方文档链接,您可以在该文档中找到更详细的使用方法和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [用python实现Shamir-secret-share](https://blog.csdn.net/chenxin0215/article/details/118344295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Galois:适用于Python的Galois字段数学对象](https://download.csdn.net/download/weixin_42121272/18845904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newcih

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值