利用Java Agent进行代码植入】的更多相关文章

利用Java Agent进行代码植入 Java Agent 又叫做 Java 探针,是在 JDK1.5 引入的一种可以动态修改 Java 字节码的技术.可以把javaagent理解成一种代码注入的方式.但是这种注入比起spring的aop更加的优美. Java agent的使用方式有两种: 实现premain方法,在JVM启动前加载. 实现agentmain方法,在JVM启动后加载. premain和agentmain函数声明如下,方法名相同情况下,拥有Instrumentation inst参…
在前说明:好久没有更新博客了,这一年在公司做了好多事情,包括代码分析和热部署替换等黑科技,一直没有时间来进行落地写出一些一文章来,甚是可惜,趁着中午睡觉的时间补一篇介绍性的文章吧. 首先热部署的场景是这样的,公司的项目非常多,真个BU事业部的项目加起来大约上几百个项目了,有一些项目本地无法正常启动,所以一些同学在修改完代码,或者是在普通的常规任务开发过程中都是盲改,然后去公司的代码平台进行发布,恶心的事情就在这里,有的一些项目从构建到发布运行大约30分钟,所以每次修改代码到代码见效需要30分钟的…
上一篇中,描述了如何使用Spring隐式的创建bean,但当我们需要引进第三方类库添加到我们的逻辑上时,@Conponent与@Autowired是无法添加到类上的,这时,自动装配便不适用了,我们需要利用Java代码来显式实现bean. 继上次的CD例程,两个接口,MediaPlayer/CompactDisc,其中MediaPlayer的实现为CDPlayer,CompactDisc的实现为CompactDisc_guangliang/CompactDisc_wangfei/CompactDi…
用了一下午总算把java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘... 通过java agent可以动态修改代码(替换.修改类的定义),进行AOP. 目标: ? 1 为所有添加@ToString注解的类实现默认的toString方法 需要两个程序,一个是用来测试的程序,一个agent用于修改代码. 1. 测试程序 被测试的程序包括: - ToString.java - Foo.java - Main.java 具体代码如下: ToString.java:定义ToString…
Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改Java字节码的技术.java类编译之后形成字节码被JVM执行,JVM在执行这些字节码之前获取这些字节码信息,并且对这些字节码进行修改,来完成一些额外的功能,这种就是java agent技术. 二.java agent可以实现什么样的功能? 1.java agent能够在加载java字节码之前进行拦…
前言 让我们继续探秘 Java 热部署.在前文 探秘 Java 热部署二(Java agent premain)中,我们介绍了 Java agent premain.通过在main方法之前通过类似 AOP 的方式添加 premain 方法,我们可以在类加载之前做修改字节码的操作,无论是第一次加载,还是每次新的 ClassLoader 加载,都会经过 ClassFileTransformer 的 transform 方法,也就是说,都可以在这个方法中修改字节码,虽然他的方法名是 premain ,…
Java探针参考:Java探针技术在应用安全领域的新突破 最近面试阿里,面试官先是问我类加载的流程,然后问了个问题,能否在加载类的时候,对字节码进行修改 我懵逼了,答曰不知道,面试官说可以的,使用Java探针技术,能够实现 我查了一下关于探针技术的知识: 2. 基于javaAgent和Java字节码注入技术的java探针工具技术原理 图0-0:动态代理功能实现说明 我们利用javaAgent和ASM字节码技术开发java探针工具,实现原理如下: jdk1.5以后引入了javaAgent技术,ja…
javaagent 简介 Javaagent 只要作用在class被加载之前对其加载,插入我们需要添加的字节码. Javaagent面向的是我们java程序员,而且agent都是用java编写的,不需要太多的c/c++编程基础,不过这篇文章里也会讲到JVMTIAgent(c实现的),因为javaagent的运行还是依赖于一个特殊的JVMTIAgent. 对于javaagent或许大家都听过,甚至使用过,常见的用法大致如下: java -javaagent:myagent.jar=mode=tes…
我们平时写 Java Agent 的机会确实不多,也可以说几乎用不着.但其实我们一直在用它,而且接触的机会非常多.下面这些技术都使用了 Java Agent 技术,看一下你就知道为什么了. -各个 Java IDE 的调试功能,例如 eclipse.IntelliJ : -热部署功能,例如 JRebel.XRebel. spring-loaded: -各种线上诊断工具,例如 Btrace.Greys,还有阿里的 Arthas: -各种性能分析工具,例如 Visual VM.JConsole 等:…
注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此决定对原理进行一些深入的了解,力争找到一种使用者尽可能少的对原有代码进行修改的方式,以达到对应的MOCK要求. 整体的感知程度可以分为三个级别: 硬编码 增加配置 无需任何修改 2.思路 在对方法进行mock,暂停以及异常模拟,在不知道其原理的情况下,进行猜想,思考其具体的实现原理,整体来说,最简单…