首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ASM 字节增强

字节是一种中间代码,它与特定平台无关。并且每个支持 Java 平台都需要有相应 JVM,负责解释和执行字节。...字节增强 字节增强技术就是一类对现有字节进行修改或者动态生成全新字节文件技术。...GitHub 地址:JBC 本文则介绍 ASM 字节增强类库 ASM ASM 是一个 Java 字节操作和解析框架。...ASM Core API ASM Core API 使用流式方式根据字节结构从上到下依次处理,性能很好,所以一般 ASM 增强字节一般都使用 Core API。...应用场景 字节增强: 实现 AOP,插入日志、性能监控等横切关注点。 代码生成: 动态创建类和方法,实现动态代理。 代码分析: 对现有代码进行静态分析。

22710

Java字节增强探秘

本文重点着眼于字节增强技术,从字节开始逐层向上,由JVM字节操作集合到Java中操作字节框架,再到我们熟悉各类框架原理及应用,也都会一一进行介绍。...图15 jclasslib查看字节 2. 字节增强 在上文中,着重介绍了字节结构,这为我们了解字节增强技术实现打下了基础。...字节增强技术就是一类对现有字节进行修改或者动态生成全新字节文件技术。接下来,我们将从最直接操纵字节实现方式开始深入进行剖析。 ?...故除此之外,我们再简单介绍另外一类框架:强调源代码层次操作字节框架Javassist。 利用Javassist实现字节增强时,可以无须关注字节刻板结构,其优点就在于编程简单。...此外,我们平时使用动态代理、AOP也与字节增强密切相关,它们实质上还是利用各种手段生成符合规范字节文件。

1K20
您找到你想要的搜索结果了吗?
是的
没有找到

Java字节增强探秘

本文重点着眼于字节增强技术,从字节开始逐层向上,由JVM字节操作集合到Java中操作字节框架,再到我们熟悉各类框架原理及应用,也都会一一进行介绍。...图15 jclasslib查看字节 2. 字节增强 在上文中,着重介绍了字节结构,这为我们了解字节增强技术实现打下了基础。...字节增强技术就是一类对现有字节进行修改或者动态生成全新字节文件技术。接下来,我们将从最直接操纵字节实现方式开始深入进行剖析。 ?...故除此之外,我们再简单介绍另外一类框架:强调源代码层次操作字节框架Javassist。 利用Javassist实现字节增强时,可以无须关注字节刻板结构,其优点就在于编程简单。...此外,我们平时使用动态代理、AOP也与字节增强密切相关,它们实质上还是利用各种手段生成符合规范字节文件。

1.8K51

JDK动态代理和CGLIB字节增强

在动态代理技术里,由于不管用户调用代理对象什么方法,都是调用开发人员编写 InvocationHandler invoke 方法(这相当于 invoke 方法拦截到了代理对象方法调用)。...,因为 JDK 最后生成 proxy class 其实就是实现了代理类所代理接口并且继承了 java 中 Proxy 类(继承 Proxy 类是为了判断该类是否为代理类),通过反射找到接口方法,...CGLIB 字节增强是JDK动态代理一个很好补充, CGLIB 中最后生成 proxy class 是一个继承代理类所代理 class,通过重写被代理类中非 final 方法实现代理。...总结为: JDK 动态代理:代理类必须是接口或继承接口类。 CGLIB 字节增强: 代理类不能是 final,代理方法也不能是 final(继承限制) 。...当一个类没有实现接口时候,就会选用 CGLIB 代理方式。

74020

JVM 字节增强技术之 Java Agent 入门

Java 还提供了另外一种方式:依赖 Java Agent 技术,修改目标方法字节,做到无侵入埋点。这种利用 Java Agent 方式采集器,也叫做探针。...用户不需要理解深层原理,就可以使用完整监控服务 关于字节基础知识可以参考美团这篇文章: 字节增强技术探索:https://tech.meituan.com/2019/09/05/java-bytecode-enhancement.html...Java Agent 简介 Java Agent 是 Java 1.5 版本之后引⼊特性,其主要作⽤是在 class 被加载之前对其拦截,已插⼊我们监听字节。...返回转换过字节数组,在这个方法中可以做任意类文件改写。...,执行结果如下: 总结 本文详细介绍 Java Agent 启动加载实现字节增强关键技术实现细节,字节增强技术为测试人员进行性能监控提供了一种新思路。

1.3K20

ASM字节编程 | 用字节增强技术给所有方法加上TryCatch捕获异常并输出

好,那么这样非入侵探针方式是怎么实现呢?如何去做方法字节增强? 在字节增强方面有三个框架;ASM、Javassist、ByteCode,各有优缺点按需选择。...这在我们之前字节编程文章里也有所提到。 本文主要讲解关于 ASM 方式字节增强,接下来案例会逐步讲解一个给方法添加 TryCatch 块,用于采集异常信息以及正常出参结果流程。...接下来我会一步步带着你通过字节增强方式,来实现我们监控需求。最终完整代码,可以通过关注公众号:bugstack虫洞栈 回复源码获取(ASM字节编程)。 1....输出异常信息 在我们使用 ASM 字节增强后,已经可以将方法拓展非常适合于监控了。...另外这里是我们通过字节增强方式进行改造方法,改造后这个方法反馈给我们仍然是字节,所以需要使用到 ClassLoader 进行加载到执行。

1.4K40

ASM字节编程 | 用字节增强技术给所有方法加上TryCatch捕获异常并输出!

好,那么这样非入侵探针方式是怎么实现呢?如何去做方法字节增强? 在字节增强方面有三个框架;ASM、Javassist、ByteCode,各有优缺点按需选择。...这在我们之前字节编程文章里也有所提到。 本文主要讲解关于 ASM 方式字节增强,接下来案例会逐步讲解一个给方法添加 TryCatch 块,用于采集异常信息以及正常出参结果流程。...接下来我会一步步带着你通过字节增强方式,来实现我们监控需求。最终完整代码,可以通过关注「公众号」:bugstack虫洞栈 回复源码获取(ASM字节编程)。 1....输出异常信息 在我们使用 ASM 字节增强后,已经可以将方法拓展非常适合于监控了。...另外这里是我们通过字节增强方式进行改造方法,改造后这个方法反馈给我们仍然是字节,所以需要使用到 ClassLoader 进行加载到执行。

75810

字节增强技术,不止有 Java Proxy、 Cglib 和 Javassist 还有 Byte Buddy

提到字节增强技术,相信用过 Spring 小伙伴都会知道 Java Proxy 和 Cglib。...毕竟面试准备八股文中说过,Spring 动态代理有两种实现方式,在有接口存在时候使用 Java Proxy,当没有接口时候使用是 Cglib。...这两种方式区别不在本文讨论范围之内,今天想给大家介绍了是另一个字节增强技术 Byte Buddy。...总的来说,使用 Byte Buddy 有下面的优势: 无需理解字节格式,简单易用 API 能很容易操作字节; 支持 Java 任何版本,库轻量,仅取决于 Java 字节代码解析器库 ASM 访问者....intercept(MethodDelegation.to(Agent.class)) .make(); // 将 agent 字节写入文件中

21000

基于字节Java代码审计

基于字节Java代码审计 之前看了基于字节Java代码审计工具实现,最近终于有空可以好好看一下其是如何实现了。本文并不会从代码出发,而是试图从字节角度分析其可行性。...只要编译成为符合字节规范内容,均可以在Java虚拟机中运行。...至此字节执行一个函数过程就结束了,这里就可以进入下一个问题了 使用字节进行审计 首先看这一段代码: public class RceYes{ public void eval(String...实现 上文已经找到了字节代码审计关键,那接下来如何通过代码去实现呢?首先第一个问题,如何将Class文件解析成字节指令形式。...这里就不得不提一下ASM了,作为字节增强技术,它可以动态修改字节或者是遍历类结构,ASM此处就不进行深入展开了,我们单单看一下遍历类结构这一点,它会按照一定顺序逐语句对字节进行解析,当解析到函数时我们就可以自定义一个局部变量表以及操作数栈来进行模拟操作

72020

字节也能做有趣

1.2字节 字节(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对组成二进制文件。字节是程序中间表示形式:介于人类可读源码和机器之间。...它经常被看作是包含一个执行程序二进制文件,更像一个对象模型。字节被这样叫是因为通常每个操作 是一字节长,所以字节程度是根据一字节。...字节也是由,一组操作组成,而操作实际上是对栈操作,可以移走参数和地址空间,也可以放入结果。JAVA通过JIT(即时编译)可以将字节转换为机器字节实现方式是通过编译器和虚拟机器。...编译器将源码编译成字节,特定平台上虚拟机器将字节转译为可以直接执行指令。在java中一般是用Javac编译源文件变成字节,也就是我们class文件。...2.字节执行 2.1JVM桢栈结构: 方法调用在JVM中转换成字节执行,字节指令执行数据结构就是栈帧(stack frame)。也就是在虚拟机栈中栈元素。

49350

字节判断方法参数个数

Jvm 如何确定方法参数个数 找到 Method DescriptionIndex 属性,找到对应描述,例如: public class AddMain { public static...java 代码,add 方法对应代码是 (II)I,最后一个 I 代表返回值,这个代表两个整型参数...., int b,String c,boolean d) { return a + b; } ​ 同样,(IILjava/lang/String;Z)I 代表有4个参数,字符串表示是...(本文完) 作者:付威 博客地址:http://blog.laofu.online 如果觉得对您有帮助,可以下方RSS订阅,谢谢合作 如有任何知识产权、版权问题或理论错误,...本文是付威网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证 交流请加群113249828: 点击加群   或发我邮件 laofu_online

78020

字节文件内部结构之谜

同一段 Java 程序在编译后生成字节文件是唯一,不会因为平台不同而产生任何变化。而同一段字节跑在不同实现 JVM 上,会产生不同机器指令。...于底层而言,其实 Sun 公司针对不同操作系统开发了不同版本 JVM,而这些 JVM 则通过识别上层字节并向下解释给操作系统执行。...因此,你同一段字节在不同平台下 JVM 上运行,会对应到不同机器指令,以此实现了跨平台运行。...那么,本文就来分析一下这个「字节」文件,解开它神秘面纱。...其实 Code 属性表最主要一个作用是,存储当前方法在编译后所生成所有字节指令,并记录所需局部变量表大小等有关方法运行信息。

1.4K90
领券