2.2.5移除类成员前面例子中用来修改类版本号的方法也可以用在ClassVisitor接口中的其它方法上。例如,通过修改visitField和visitMethod方法中的access核name,你可以修改一个字段或者方法的访问修饰符和名称。更进一步,除了转发修改该参数的方法调用,你也可以选择不转发该方法调用,这样做的效果就是,对应的类元素将被移除。 例如,下面的类适配器将移除外部类和内
转载 2024-01-28 19:35:52
52阅读
在Java的开发和运行环境中,`javaagent`和ASM是两个常被提及的术语。`javaagent`是Java的一种特性,允许在JVM启动时加载特定的代理程序,从而可以在应用的生命周期中动态地修改字节码。而ASM是一个高级Java字节码操作框架,可以用来生成、分析和修改Java字节码。两者之间的区别主要在于它们的用途和功能。本文将探讨如何利用这些工具进行有效的字节码操作,尤其是在Java代理开
原创 5月前
20阅读
1.背景Java Agent出现在JDK1.5版本以后,它允许程序员利用agent技术构建一个独立于应用程序的代理程序,用途也非常广泛,可以协助监测、运行、甚至替换其他JVM上的程序,先从下面这张图直观的看一下它都被应用在哪些场景:2.Premain模式Premain模式允许在主程序执行前执行一个agent代理,实现起来非常简单,下面我们分别实现两个组成部分。2.1 agent先写一个简单的功能,
转载 2023-08-18 15:12:42
109阅读
Java Agent机制在JDK1.5版本开始,Java增加了Instrumentation(Java Agent API)和JVMTI(JVM Tool Interface)功能,该功能可以实现JVM再加载某个class文件对其字节码进行修改,也可以对已经加载的字节码进行一个重新的加载。利用该机制能够实现许多技术,如RASP、内存马、IDEA破解。Java Agent有两种运行模式:启动Java
转载 2023-07-25 23:15:50
4阅读
1、入口是定义MANIFEST.MF文件,声明Premain-Class  属性,值是一个类(如com.blueware.agent.StartAgent)2、在上述类中实现public static void premain(String agentOps, Instrumentation inst);方法,通过使用
文章大纲引言一、ASM库概述二、ASM库的架构模型概述1、核心API概述2、树 API概述三、ASM库核心组件和接口类1、ClassVisitor2、ClassWriter2.1、ClassWriter 核心方法2.2、AnnotationWriter、FieldWriter、MethodWriter、SignatureWriter3、FieldVisitor 、MethodVisitor 、A
实现javaagent功能的是一个叫做instrument的JVMTIAgent(linux下对应的动态库是libinstrument.so),另外instrument agent还有个别名叫JPLISAgent(Java Programming Language Instrumentation Services Agent),从这名字里也完全体现了其最本质的功能:就是专门为java语言编写的插桩...
转载 2019-12-07 20:03:00
185阅读
2评论
一、alibaba/jvm-sandbox 概述alibaba/jvm-sandbox 是 JVM 沙箱容器,一种 JVM 的非侵入式运行期 AOP 解决方案。沙箱容器提供动态增强类你所指定的类,获取你想要的参数和行信息甚至改变方法执行动态可插拔容器框架在其能力至上构建的上层应用有:chaosblade-io/chaosblade其chaosblade-io/chaosblade-exec-jvm
转载 2023-10-19 20:25:26
62阅读
# JavaAgent结合ASM、Javassist 监控方法调用量统计 在Java开发中,我们经常需要对代码进行性能分析和调优。其中,对方法的调用量进行统计是一个重要的指标,帮助我们了解代码中哪些方法被频繁调用,从而进行针对性的优化。本文将介绍如何使用JavaAgent结合ASM和Javassist来监控方法的调用量,并统计其被调用的次数。 ## JavaAgent简介 JavaAgent
原创 2023-07-22 10:07:52
263阅读
AOP(Aspect OrientedProgramming, 面向切面/方面编程) 旨在从业务逻辑中分离出来横切逻辑【eg:性能监控、日志记录、权限控制等】,提高模块化,即通过AOP解决代码耦合问题,让职责更加单一。运用技术:         SpringAOP使用了两种代理机制,一种是基于JDK的动态代理,另一种是
转载 2024-01-26 09:13:08
174阅读
1.aop之ajc增强什么是ajc增强?ajc是aop的另外一种实现, 通过aspectj编码器来改动class源文件实现aop2.aop之agent增强什么是agent增强?agent是aop的另外一种实现,是通过类加载时改动class类3.aop之proxy增强-jdk代理aop最重要的实现基于代理的实现public class JdkProxyDemo { interface Foo
转载 2024-02-11 20:07:08
64阅读
标题是随便取的今天看到有篇文章写的是关于java的xss,文中还提到了一个面试题,刚好我曾经也被问到过这个问题。让我不禁想起以往遇到的一些和java相关的安全面试题。现如今,很多大甲方,由于自己系统大部分都是java写的,所以他招安全人员时,都会提到熟悉java或java代码审计 加分。那么既然他要求你会,必定面试时会有些针对性的问题,由于我面过两家这样的公司,这里将我需要的一些问题写出来,同时页
Java Agent支持的配置属性TIPS 本表格基于Skywalking 6.6.0,官方文档详见:https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/README.md ,其他版本配置项不完全相同,请自行将链接中的 v6.6.0 修改成你所使用的版本。属性名描述默认值ag
转载 2023-08-11 13:42:50
627阅读
前置知识JVMTIJava生态中有一些非常规的技术,它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。形象地说,JVMTI是Java虚拟机提供的一整套后门。通过这套后门可以对虚拟机方方面面进行监控,分析。甚至干预虚拟机的运行。JVMTI是什么?JVMTI全称JVM Tool Interface
转载 2021-01-19 15:31:20
4336阅读
2评论
JavaAgent技术JavaAgent是一种特殊的Java程序,是Instrumentation的客户端。它与普通Java程序通过main方法启动不同,JavaAgent并不是一个可以单独启动的程序,它必须依附在一个Java应用程序(JVM)上,与主程序运行在同一个进程中,通过Instrumentation API与虚拟机交互。JVM启动时静态加载对于JVM启动时加载的Agent模块代码,Ins
转载 2023-09-01 10:28:00
509阅读
前言最近做项目,需要实现一个agent,实现运行过程替换字节码,当笔者实现这些功能时发现还是很多注意事项的。而且字节码的替换过程如果类的属性与方法升级了,那么加载就会报错。这种做法的好处是代码无侵入,缺点也很明显,严重依赖特定的jvm版本和中间件等。javaagent简介javaagent实际上是JVMTI使用的技术,核心依靠Instrumentation实现。查看这个包,官方文档:java.la
转载 2023-09-05 20:58:37
190阅读
一、agent分类一种是在主程序之前运行的Agent一种是在主程序之后运行的Agent(前者的升级版,1.6以后提供)二、javaagent概述javaagent(Java代理程序)是java命令的一个参数。参数 javaagent 可以用于指定一个 jar 包,并且对该 java 包有2个要求:(1)这个 jar 包的 MANIFEST.MF 文件必须指定 Premain-Class 项 (2)
转载 2023-07-23 03:31:22
356阅读
一、什么是javaagentjavaagent是一个JVM“插件”,一种专门精心制作的.jar文件,它能够利用JVM提供的Instrumentation API。1.1、概要Java Agent由三部分组成:代理类、代理类元信息和JVM加载.jar和代理的机制,整体内容如下图所示:1.2、javaagent的基石java.lang.instrumentjavaagent的启动方式有以下几种:通过在
转载 2023-09-01 13:15:09
310阅读
agent开发设计agent 开发的一些心得,适合熟悉agent或者有agent开发需求的同学1 有个基础的agent,是java 标准的agent。这是agent代码入口2 设计包结构, 基础agent agent下有plugin,加载plugin可以自己定义一个类加载器plugin:插件定义具体的模块功能module,module是要加入到业务的类加载器中,因为是和业务相关的具体功能modul
-javaagent:[=]load Java programming language agent, see java.lang.instrument代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码。agent的代码与你的main方法在同一个JVM中运行,并被同一个system classloader装载,被...
转载 2019-12-06 08:49:00
421阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5