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

2.3 ASM-类-工具类

2.3.1 类型 正如前面章节介绍ASMAPI展示Java类型,像编译后class中一样,即使用内部名、类型描述符。 使用源码中展示方式,可以使代码更加易读。...但是ASM提供了一个Type类,方便在需要时候进行手动转换。 一个Type对象代表一种Java类型,可以由类型描述符或者Class对象创建。 Type类中也包含了一些表示基本数据类型静态变量。...CheckClassAdapter ClassWriter不会检查方法调用顺序是否合适,以及参数是否合法。 因此生成被Java虚拟机验证器所拒绝非法class是可行。...ASMifier可以直接在命令行中使用,例如: java -classpath asm.jar:asm-util.jar \ org.objectweb.asm.util.ASMifier \ java.lang.Runnable...生成代码,使用缩进后,如下: package asm.java.lang; import org.objectweb.asm.*; public class RunnableDump implements

89520

ASM初探

1.获取节点 获取一个类节点代码如下所示: ClassNode classNode = new ClassNode(); // 1 ClassReader classReader.../awt/image/ImageObserver;)I ```java **当我们操控完指定类节点之后,就可以使用 ASM ClassWriter 类来输出字节码**,代码如下所示: ```java...因此 ASM 提供了一个 类访问者 ClassVisitor,以通过它来访问当前类各个组件,当解析器 ClassReader 依次遇到上述各个组件时,ClassVisitor 对应 visitor...栈映射帧 StackMap Frame 它是 Java 6 以后引入一种验证机制,用于 检验 Java 字节码正确性。...2)、注意本地变量表和操作数栈数据交换以及 try catch blcok 处理,关于异常处理可以使用 ASM 提供 CheckClassAdapter,可以在修改完成后验证一下字节码是否正常。

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

写个更牛逼Transform | Plugin 进阶教程

之前在做ThreadPoolHook时候了解到滴滴Booster内asm都是ClassNode,这里我先简单说下ClassNode好了。...ClassNode简介 如果你仔细读了关于字节码文章后,你应该会知道Java中当一个方法被调用时会产生一个栈帧(Stack Frame),可以理解为那个方法被包含在了这个栈帧里,栈帧包括3个部分,局部变量区...一般一句简单java代码,被翻译成字节码情况下复杂度都会翻好几倍,其中特别是Java字节码栈帧。...这部分如果大家有兴趣详细了解的话可以看下这篇文章啊,Java字节码(Bytecode)与ASM简单说明....上面基本就是我所有的插桩代码了,其实基本都是字符串匹配之类,只是因为bytecodejava不一样,而且bytecode可读性比较差了点,之前也安利过大家asm bytecode viewer

20320

ASM 字节码增强

以下是一些常见 Java 字节码类库: ASM (Bytecode Manipulation Framework): 简介:ASM 是一个轻量级字节码操作框架,提供了生成和转换字节码功能。...它是一个强大字节码工具,被广泛用于许多 Java 字节码操作场景。 官方网站:ASM Byte Buddy: 简介:Byte Buddy 是一个用于创建和操作字节码库。...ASM API 从组成结构可以分成两部分,一部分为 Core API,另一部分为 Tree API: ASM Core API 包括 asm.jar、asm-util.jar 和 asm-commons.jar...asm-tree.jar 主要类按“包含”组织关系: ClassNode:(类) VisitMethod(): 用于访问类中方法。 VisitField(): 用于访问类中字段。...ClassNode classNode = new ClassNode(Opcodes.ASM9); classReader.accept(classNode, ClassReader.SKIP_DEBUG

28310

简单介绍ASM树API

添加和删除类成员 添加和删除类就是在ClassNode对象fields或methods列表中添加或删除元素 public class ClassTransformer { protected...事实,这一区别对于几乎所有基于树转换都是有效。 和生成类情景一样,使用树 API 转换类时,所花费时间和占用内存也要多于使用核 心 API 时候。...类生成和转化 上面只是如何创建和转换 ClassNode 对象,但还没有看到如何由一个类字节数组表示来构造一个 ClassNode,或者反过来,由 ClassNode 构造这个字节数组。...要由字节数组构建 ClassNode,可以将它与 ClassReader 合在一起,使 ClassReader 生成事件可供 ClassNode 组件使用,从而初始化其字段 ClassNode cn...= new ClassNode(ASM4); ClassReader cr = new ClassReader(...); cr.accept(cn, 0); ... // 可以在这里根据需要转换

99310

字节码也能做有趣事之ASM

0.写在前面 本篇是本系列第二篇,主要介绍什么是ASM,以及如何使用ASM。 如果没有阅读之前,还请阅读一下字节码也能做有趣事,因为需要一章部分知识。...而这里我要介绍就是操作字节码一把利器-ASMASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类功能。...如果下载完毕,还记得我们一节那个例子吗?...在ClassVisitor定义了很多方法,例如:类注解,类构造方法,类字段,类方法,静态代码块访问。用于我们去重写,以便做一些类逻辑扩展。...classNode = new ClassNode(org.objectweb.asm.Opcodes.ASM5); classReader.accept(classNode, ClassReader.SKIP_DEBUG

1.2K51

写个更牛逼Transform | Plugin 进阶教程

之前在做ThreadPoolHook时候了解到滴滴Booster内asm都是ClassNode,这里我先简单说下ClassNode好了。...ClassNode简介 如果你仔细读了关于字节码文章后,你应该会知道Java中当一个方法被调用时会产生一个栈帧(Stack Frame),可以理解为那个方法被包含在了这个栈帧里,栈帧包括3个部分,局部变量区...一般一句简单java代码,被翻译成字节码情况下复杂度都会翻好几倍,其中特别是Java字节码栈帧。...这部分如果大家有兴趣详细了解的话可以看下这篇文章啊,Java字节码(Bytecode)与ASM简单说明....上面基本就是我所有的插桩代码了,其实基本都是字符串匹配之类,只是因为bytecodejava不一样,而且bytecode可读性比较差了点,之前也安利过大家asm bytecode viewer

41920

Tree Api+ClassScanner = 识别三方隐私权限调用 | Android Lint

项目地址 AndroidLint 正文 之前介绍过UastScanner是针对于java,kt语法树,所以我们能在他们编译成产物过程时候校验他们语法是否合理,如果不合理就能用Lint进行阻断,之前文章也有介绍...问题严重程度(忽略、警告、错误) Implementation( //实现,包括处理实例和作用域 PrivacyClassDetector::class.java..., Scope.CLASS_FILE_SCOPE ) ) } } 这部分其实和我写隐私权限替换asm很相似,因为已经编译成字节码了...: ClassNode) } 我们先从这个抽象接口看起,我在函数上面做了简单方法描述。...当然理解文章内容前提是你要有一定虚拟机机器码认知,对于asm相关理解就会融汇贯通,无论是transform还是ClassScanner就都是一样

56930

安卓7.1精简版下载_asm字节码

大家好,又见面了,我是你们朋友全栈君。 ASM是一个久经考验框架,包括Spring在内多个框架都使用ASM作为字节码工具。...7.1 更新如下 用于Java 13新常量Opcodes.V13 asm.Type中小优化 检查CheckMethodAdapter.visitLocalVariable中签名 重构单元测试使用Arrange-Act-Assert...asm-deprecated.jar 删除asm.util.Printer buf和appendString(之前已弃用) bug修复 317863:对于方法本地Java类,InnerClasses属性重新映射逻辑是错误...317866:扩展帧导致七个以上维度基本数组类型不正确 317868:带有括号类名称Frame.getAbstractTypeFromDescriptorIllegalArgumentException...317869:CheckClassAdapter需要非nullClassVisitor,它返回非nullMethodVisitor 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

1.3K20

再聊聊pthread oom 问题 | 性能优化

基于当时场景以及对Rxjava分析,只能说解决了一小部分问题。但是实际只要我们滥用了线程,特别是华为设备,还是有可能发生对应问题。...这个是在Throwables里面获取到。从这里我们其实可以看出来,堆栈信息是保存在线程。 这么说起来线程被作为gcroot就可以理解了。因为虚拟机持有了所有存活线程实例和堆栈。...这次也还是使用asm吧,之前我们在使用asm时候大部分场景都是采取新增一个函数调用方式。这次我们将采取类替换规则。...: ByteArray { val classNode = ClassNode(Opcodes.ASM5) val classReader = ClassReader(srcClass...这部分就是所有基于asm扫描插入代码了。

25420

现在准备好告别Transform了吗? | 拥抱AGP7.0

Extension AGP版本升级之后,应该是为了区分新旧版Extension,所以在AppExtension基础,新增了一个AndroidComponentsExtension出来。...这就是新asm api 设计思路了,也是我们这边大佬字节码框架大佬设计。另外bytex内设计思路也是如此。...tips ClassNode 因为是先生成语法树,所以和一般ClassVisitor有点小区别,需要在visitEnd方法内调用accept(next) 实际代码分析 接下来我们实战咯。...class PrivacyClassNode(private val nextVisitor: ClassVisitor) : ClassNode(Opcodes.ASM5) { override...second } 这部分比较简单,把逻辑抽象定义在类ClassNode内,然后在visitEnd方法时候调用我之前说accept(nextVisitor)方法。

49420

牛逼Transform Plus | Transform进阶教程

api 'org.ow2.asm:asm:9.2' api 'org.ow2.asm:asm-tree:9.2' 第二次asm操作时候我们会进行文件copy操作以及类替换等等,第二次时候我们会在第一次收集到类数据...这部分可以参考下我自己写路由Transform或者DRouter,我之前分析过,因为我路由表注册类是class,而不是jar。所以我是通过asm读取当前类进行一次路由表回溯。...之后我就会将本次增删改操作作用在这个注册类就行了。...自动化曝光 我之前文章介绍过关于View有效曝光监控()。我最近对这个也进行了一个小小改良和尝试,打算还是尝试下配合ASM对其进行调整。...class RecyclerViewHolderImp(classNode: ClassNode) { init { if (isRecyclerViewHolder(classNode.superName

59250

IDEA过期了吧!加个Jar包就破解了,为什么?

在以下章节中你可以学习到如下知识; Java Agent 非硬编码式代理类,这也就是常说探针技术 ASM 字节码编程简单使用 工程打包额外加载其他 jar 方法 最后是一个破解演示,仅适合个人学习使用...之后通过我们 java agent 编程模拟授权被破解。 1....Java Agent 介绍 在 JDK1.5 以后,JVM 提供了 agent 技术构建一个独立于应用程序代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM程序。...ASM 介绍 ASM 是一个 JAVA 字节码分析、创建和修改开源应用框架。在 ASM 中提供了诸多API用于对类内容进行字节码操作方法。...与传统 BCEL 和 SERL 不同,在 ASM 中提供了更为优雅和灵活操作字节码方式。目前 ASM 已被广泛开源应用架构所使用,例如:Spring、Hibernate 等。 3.

1.6K20

Java 字节码操作框架——ASM

ASM 当我们需要对一个 class 文件做修改时,我们可以选择自己解析这个class 文件,在符合 Java 字节码规范前提下进行字节码改造。...那个时候包含 java.lang.reflect.Proxy 包 JDK 1.3 还没发布,ASM 被作为代码生成器,用来生成动态代理代理类。...经过多年发展,ASM 在诸多框架中已经遍地开花,成为字节码操作领域事实标准。...更新速度快,支持最新 Java 版本 速度非常快,在动态代理 class 生成和 class 转换时,尽可能确保运行中应用不会被 ASM 拖慢 非常可靠、久经考验,已经有很多著名开源框架都在使用...使用 Tree Api 方式也可以实现同样效果 byte[] bytes = getBytes(); ClassReader cr = new ClassReader(bytes); ClassNode

29420

说说编译插桩

具体实现可以参看《AspectJ程序设计指南》这本书 (2)ASM 如果说 AspectJ 只能满足 50% 字节码处理场景,那ASM就是一个可以实现 100% 场景 Java 字节码操作框架,它功能也非常强大...使用 ASM 操作字节码主要特点有:操作灵活,可以根据需求自定义修改、插入、删除。上手比较难,需要对 Java 字节码有比较深入了解。...下面简单介绍一下ASM ASM 库提供了两个用于生成和转换已编译类 API,一个是核心 API,以基于事件形式来表示类,另一个是树 API,以基于对象形式来表示类。...核心是ClassNode,可以在此基础增加或者删除属性,成员之类,当然还有更高级。缺点是:如果使用者对字节码不熟悉的话不好操作 3.掌握插桩应该具备基础知识 (1)熟练掌握字节码相关技术。...不过也大致理解了具体流程 (1)继承Transform实现字节码修改(其中就有asm应用,对ASM有所了解的话基本能看懂第一篇文章里面的modifyClass这个函数是干嘛

1.2K20

3.3 ASM-方法-工具类

因此可以用于在转换链中任何一点,跟踪生成或者转换方法内容。...例如: java -classpath asm.jar:asm-util.jar \ org.objectweb.asm.util.TraceClassVisitor \ java.lang.Void...CheckClassAdapter 这个类已经在上一章中介绍过了,用于检查ClassVisitor方法是否按照适当顺序被调用、方法参数是否合法,它也同样适用于MethodVisitor方法。...它可以被用来知道如果通过ASM生成某些编译后代码:在Java中只要编写相应源码即可,使用javac编译,并且使用ASMifier访问编译后类。 你将会得到ASM代码,来生成相应源码字节码。...当然在它仅能作用在包含了预先计算过栈哈希帧编译类,即使用Java 6或者更改版本编译类(或者像之前示例一样,使用含有COMPUTE_FRAMES参数ASM adapter将类升级到Java 6)

1.7K00

ASM备份集在文件系统恢复测试常见问题

1.备份数据库和控制文件 一般使用ASM场景是RAC,当然也有单机使用ASM环境(Standalone)。这些都不重要,即使是使用文件系统,备份数据库方法也都是一样。...我这里备份集是在我NAS存储,可以在Site B直接看到这些备份集。...数据库; 数据文件,在数据库已经mount基础,设定要恢复数据文件目录,根据备份集恢复数据库,最终确认可以open数据库。...这本来是天经地义一件事,因为之前数据库是在ASM环境,控制文件也是之前环境备份出来,记录肯定是ASM路径无疑。...磁盘组,显然是不合我们要求,所以我们需要在新文件系统路径下创建新redo日志文件,并删除ASM那些日志文件,同时我们现在环境是单实例,不再需要thread 2: alter database

1.6K10

37. Groovy 类型检查扩展,第一篇 编写类型检查扩展

不过,这也带来了一些限制,其中大多数限制来自Groovy本质仍然是一种动态语言。...在很多情况下,DSL引擎是用Groovy(或Java)编写,然后用户代码作为脚本执行,这意味着在用户逻辑之上有某种包装器。...通常,用户编写脚本无需测试就可以投入生产,因为DSL逻辑达到了任何用户都可以使用DSL语法编写代码地步。最后,用户可能会忽略他们所编写实际是代码。...PS:注意,虽然在内部类型检查器支持多种机制来实现类型检查扩展(包括普通java代码),但推荐方法是使用那些类型检查扩展脚本。...2.4 类型检查扩展相关API AST:类型检查API是一个低级API,处理抽象语法树。要开发扩展,您必须很好地了解AST,即使DSL比处理纯Java或GroovyAST代码要容易得多。

71630
领券