ASM
aswang
这个作者很懒,什么都没留下…
展开
-
ASM指南翻译-1
ASM 3.0Java 字节码引擎库 1简介1.1动机程序分析,生成以及转换是很有用的技术手段,可以应用在很多场景下: 程序分析,涉及的范围很广,从简单的语法解析到完整的语义分析,也可用来发现程序中潜在的bug,检测未使用的代码,以及反向工程等。用来帮助编译器生成代码。包括传统的编译器,用在分布式编程中的内嵌的编译器,以及即时编译器等...2011-09-26 19:00:25 · 179 阅读 · 0 评论 -
ASM指南翻译-14 方法生成与转换的相关工具
3.3工具在org.objectweb.asm.commons包中预先定义了一些方法适配器,它们可以辅助你定义你自己的适配器。这个章节将介绍其中的三个适配器,展示如何在AddTimerAdapter示例中使用它们(3.2.4)。它也展示了如何使用前面章节中提到的工具来删除方法或者转换。 3.3.1基本工具在2.3节中出现的工具也可以针对方法使用。Type ...2011-10-24 20:17:52 · 214 阅读 · 0 评论 -
ASM指南翻译-13 有状态转换
3.2.5有状态转换在前面章节看到的转换都是局部的,它们都没有依赖于之前已经访问过的代码:在方法最开始添加的代码始终是一样的并且总是会被添加,同样,在RETURN之前添加的代码也是如此。这样的转换称之为无状态转换。这些转换较容易实现,但是也只有这种最简单的转换才满足这个属性。 更复杂的转换,需要记住之前访问过代码的一些状态。考虑这样的一个转换,移除所有ICONST_0 IADD指令序列...2011-10-20 11:41:18 · 285 阅读 · 0 评论 -
ASM指南翻译-12 无状态转换
3.2.4无状态转换假定,我们想要测量一个程序中花费在每个类上的时间,那么我们需要在每个类上添加一个静态的计时字段,并且我们需要将每个方法的执行之间加到这个字段上。也就是说我们想转换类似于C这样的一个类:public class C { publicvoid m() throws Exception { Thread.sl...2011-10-20 10:14:47 · 138 阅读 · 0 评论 -
ASM指南翻译-11 方法转换
3.2.3转换方法现在,你已经猜到了,方法可以像类一样就行转换,例如,通过使用一个方法适配器来转发那些带有修改的方法调用:改变参数可以被用来变更指令,不转发某个方法调用可以删除一个指令,插入新的调用可以添加新的指令。MethodAdapter类提供了这样的基本实现,它仅仅转发它收到的所有方法调用。 为了弄清楚方法适配器如何使用,让我们考虑一个简单的例子,删除方法中的NOP指令(删...2011-10-19 16:37:01 · 165 阅读 · 0 评论 -
ASM指南翻译-10 生成方法
3.2接口和组件3.2.1表现ASM API中关于方法的生成和转换的部分是基于MethodVisitor接口的(见图3.4),该接口由ClassVisitor的visitMethod方法返回。除了一些与注解和调试相关的方法之外,这些将在后面章节中介绍,MethodVisitor接口还针对每个字节码指令分类定义了一个方法,这个分类是基于这些指令的编号以及参数的类型(这些分类与3.1.2...2011-10-19 11:19:46 · 277 阅读 · 0 评论 -
ASM指南翻译-9
3.1.3示例接下来我们看看一些基本的例子,以获取关于字节码指令如何工作的具体印象。考虑下面这个Bean类:package pkg;public class Bean { privateint f; publicint getF() { returnthis.f; } ...2011-10-18 11:16:55 · 203 阅读 · 0 评论 -
ASM指南翻译-8
3方法这一章节将解释如何使用ASM核心API生成和转换编译后的方法。首先介绍编译后的方法的表现形式,然后介绍相关的ASM接口,组件以及工具,结合很多说明性的示例讲解如何生成和转换方法。 3.1结构在编译后的类中,方法的代码是以字节码指令序列保存的。为了生成和转换这些类,我们必须了解这些指令以及它们如何工作。这个章节将粗略的讲解一下这些指令,但是这已足够我们去编写一些简单的...2011-10-14 16:28:06 · 167 阅读 · 0 评论 -
ASM指南翻译-7
2.3工具除了ClassVisitor接口,以及与之相关的三个组件ClassReader ClassAdapter和ClassWriter,ASM在org.objectweb.asm.util包中提供了一些工具用来帮助开发类生成器或者适配器,这些工具在运行时并不需要。ASM提供了一些实用类用来在运行时操作内部名称,类型描述符以及方法描述符。所有的这些工具将在下面介绍。2.3.1类型就像...2011-10-13 18:01:29 · 202 阅读 · 0 评论 -
ASM指南翻译-6
2.2.5移除类成员前面例子中用来修改类版本号的方法也可以用在ClassVisitor接口中的其它方法上。例如,通过修改visitField和visitMethod方法中的access核name,你可以修改一个字段或者方法的访问修饰符和名称。更进一步,除了转发修改该参数的方法调用,你也可以选择不转发该方法调用,这样做的效果就是,对应的类元素将被移除。 例如,下面的类适配器将移除外部类和...2011-10-12 10:33:28 · 222 阅读 · 0 评论 -
ASM指南翻译-5
2.2.4转换类到目前为止,ClassReader和ClassWriter都是独立使用。手工产生事件,然后被ClassWriter直接消费,或者对称地,事件由ClassReader产生,然后手工地消费,如通过一个自定义的ClassVisitor来实现。当把这些组件组合在一起使用时,将变得很有趣。第一步,将ClassReader产生的事件导入到ClassWriter,结果就是类将被ClassRe...2011-10-11 17:21:33 · 199 阅读 · 0 评论 -
ASM指南翻译-4
2.2.3生成类生成一个类只需要ClassWriter组件即可。下面将使用一个例子来展示。考虑下面的接口:package pkg;public interface Comparable extendsMesurable { intLESS = -1; intEQUAL = 0; intGREATER = ...2011-10-09 19:09:01 · 207 阅读 · 0 评论 -
ASM指南翻译-3
2.1接口和组件 2.2.1表现Presentation生成和转换编译后的类的ASM API是基于ClassVisitor接口的(见图2.4)。在这个接口中的每一个方法都与类文件中有着相同名称的段相对应(见图2.1)。在访问类结构中简单的段时,是通过调用一个独立的方法来实现的,该方法的参数就是该段相关的内容,该方法的返回值为void。对长度任意并且较复杂的段进行访问时,是通过一个初始化...2011-09-28 18:16:01 · 162 阅读 · 0 评论 -
ASM指南翻译-2
第一部分 核心API2类这一章解释了如何使用ASM核心API来生成和转换编译后的java类。首先,结合一些说明性的例子,解释编译后的java类的相关结构,以及与之对应的ASM接口、组件和其他用于生成和转换的工具。关于方法,注解和泛型等内容,将在下一章节介绍。2.1结构2.1.1概述一个编译后的java类的结构还是比较简单的。与被编译为本地代码的应用程序不...2011-09-27 15:35:25 · 149 阅读 · 0 评论 -
ASM指南翻译 暂时翻译到这儿
最近因为项目紧张,暂时没多少时间继续翻译了,等后面有时间会接着翻译完。但目前asm中核心api部分基本翻译完成,后面还剩下一节关于元数据的(metadata)还没翻译。 现在把已经翻译的部分贴出来,如果发现有错,请留言,我及时更正。 ...2011-10-30 20:02:31 · 157 阅读 · 0 评论