asm-giude阅读笔记001(ASM引擎库的简单介绍)

Copyright c 2007, Eric Bruneton All rights reserved.

 

ASM 一个Java字节码引擎库

 

1. 介绍

 

1.1 动机

 

程序的分析、生成、转换通常是一种非常重要的技术:

 

>程序分析(包括小到语法分析,大到全部的语义分析),可以用于发现程序中潜在的bug、检测其中的无用代码等。

 

>程序生成,用于编译器中。既包括传统的编译器,也包括用于开发的编译器框架、即时编译器等。

 

>程序转换,可以用于优化或混淆程序,在面向切面编程中,可以用于向程序中插入调试或监控代码。

 

所有这些技术可以体现在任何一种语言中,根据语言的不同,这些技术的实现也有难有易。在Java中,这些技术可以用在源代码或编译过的.class文件上。

 

ASM是专门用于Java的程序分析、生成、转换工具。ASM的下载地址:http://asm.objectweb.org 。

 

ASM的优点如下:

 

>简单、设计优秀、模块的API,使它非常易于使用。

 

>有完备的文档,还有配备了一个Eclipse插件辅助开发

 

>支持Java6

 

>小巧、快速、健壮

 

>有较大的用户社区,新手可以从中获取帮助

 

>开源

 

1.2 概览

 

1.2.1 适用范围

 

ASM库的目标是生成、转换和分析Java class。ASM提供了用于读写转换Java字节码数组的工具,这些工具使用更高级的概念对Java字节码进行操作,比如数字常量、字字符串、Java标识符、Java类型、Java类结构元素等。

 

ASM库只用于分析、生成、转换Java字节码。类加载等操作,ASM库中并不提供。

 

注:ASM没有实际含义,它不是某些英文单词的缩写。

 

1.2.2 模型

 

ASM提供了两套用于生成和转换已编译Java类的API。

 

Core API 提供了基于事件的表现形式。

 

Tree API 提供了基于对象的表现形式。

 

在基于事件的模型中,Java类表现为一个事件的序列,序列中的每一个事件表示了类中的一个元素,比如头部、字段、方法声明、指令等。

 

在基于对象的模型中,Java类表现为一个对象树。树中的每个对象表示里类中的一个元素,比如类本身、字段、方法等。

 

基于对象模型的API构建于基于事件的API之上。

 

如果你对XML比较熟悉的话,那么实际上可以把 ASM Core API 比作 XML SAX,而 ASM Tree API 则可以看做是 XML DOM。

 

1.2.3 架构

 

这里的描述比较晦涩难懂,暂时略过。

 

1.2.4 代码组织

 

>org.objectweb.asm

>org.objectweb.asm.signature 

上面2个包中定义了基于事件模型的API,提供了Java类的parser和writer。这2个包存在于asm.jar中。

 

>org.objectweb.asm.util 

存在于asm-util.jar中,用于对core API进行调试。

 

>org.objectweb.asm.commons 

包含了一些预定义的类转换器(多数基于core API),位于asm-commons.jar中。

 

 >org.objectweb.asm.tree

在asm-tree.jar中。定义了基于对象模型的API。

 

>org.objectweb.asm.tree.analysis

位于asm-analysis.jar中,提供了一个类分析框架和一些基于时间模型API的预定义类分析器。

 

jar包分类:

 

>基于事件模型:asm.jar、asm-util.jar、asm-commons.jar

>基于对象模型:asm-tree.jar、asm-analysis.jar

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值