Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

ASM4手册中文版 PDF 下载


分享到:
时间:2020-04-08 15:18来源:http://www.java1234.com 作者:小锋  侵权举报
ASM4手册中文版 PDF 下载
失效链接处理
ASM4手册中文版  PDF 下载

 
本站整理下载:
提取码:zwy1 
 
 
相关截图:
 
主要内容:

1.1 动机 程序分析、程序生成和程序转换都是非常有用的技术,可在许多应用环境下使用: 程序分析,既可能只是简单的语法分析(syntaxic parsing),也可能是完整的语义分 析 (sematic analysis),可用于查找应用程序中的潜在 bug、检测未被用到的代码、 对代码 实施逆向工程,等等。 程序生成,在编译器中使用。这些编译器不仅包括传统编译器,还包括用于分布式程序 设计的 stub 编译器或 skeleton 编译器,以及 JIT(即时)编译器,等等。 程序转换可,用于优化或混淆(obfuscate)程序、向应用程序中插入调试或性能监视 代 码,用于面向方面的程序设计,等等。 所有这些技术都可针对任意程序设计语言使用,但对于不同语言,其使用的难易程度可能会 有 所不同。对于 Java 语言,它们可用于 Java 源代码或编译后的 Java 类。在使用经过编译的类时, 其好处之一显然就是不需要源代码。因此,程序转换可用于任何应用程序,既包括保密的源代码, 也包含商业应用程序。使用已编译类的另一个好处是,有可能在运行时,在马上就要将类加载到 Java 虚拟机之前,对类进行分析、生成或转换(在运行时生成和编译源代码也可以,但其速度很 慢,而且需要一个完整的 Java 编译器)。其好处是,诸如 stub 编译器或方面编织器等工具对用户 变为透明。 由于程序分析、生成和转换技术的用途众多,所以人们针对许多语言实现了许多用于分析、 生 成和转换程序的工具,这些语言中就包括 Java 在内。ASM 就是为 Java 语言设计的工具之一, 用 于进行运行时(也是脱机的)类生成与转换。于是,人们设计了 ASM①库,用于处理经过编译 的 Java 类。这个库的设计使其尽可能保持快速和小型化。对于那些在运行时使用 ASM 进行动态 类生成或转换的应用程序来说,尽可能提高库的运行速度是非常重要的,这样可以保证这些应 用 程序的速度不致下降过多。而保持 ASM 库的小型化也非常重要,一方面是为了在内存有 限的环 境中使用,另一方面,也为了避免使那些使用 ASM 的小型应用程序或库增大过多。 ASM 并不是惟一可生成和转换已编译 Java 类的工具,但它是最新、最高效的工具之一,可 从 http://asm.objectweb.org 下载。其主要优点如下:
① ASM 的名字没有任何含义:它只是引用 C 语言中的__asm__关键字,这个关键字允许执行一些用汇 编 语言编写的函数。 1 / 101
《ASM4 使用指南》- 第 1 章 引言 有一个简单的模块 API,设计完善、使用方便。 文档齐全,拥有一个相关的 Eclipse 插件。 支持最新的 Java 版本——Java 7。 小而快、非常可靠。 拥有庞大的用户社区,可以为新用户提供支 持。 源许可开放,几乎允许任意使用。 1.2 概述 1.2.1 范围 ASM 库的目的是生成、转换和分析以字节数组表示的已编译 Java 类(它们在磁盘中的存储 和 在 Java 虚拟机中的加载都采用这种字节数组形式)。为此,ASM 提供了一些工具,使用高于 字 节级别的概念来读写和转换这种字节数组,这些概念包括数值常数、字符串、Java 标识符、Java 类型、Java 类结构元素,等等。注意,ASM 库的范围严格限制于类的读、写、转换和分析。具 体来说,类的加载过程就超出了它的范围之外。 1.2.2 模型 ASM 库提供了两个用于生成和转换已编译类的 API,一个是核心 API,以基于事件的形式 来表示类,另一个是树 API,以基于对象的形式来表示类。 在采用基于事件的模型时,类是用一系列事件来表示的,每个事件表示类的一个元素,比 如 它的一个标头、一个字段、一个方法声明、一条指令,等等。基于事件的 API 定义了一组 可能 事件,以及这些事件必须遵循的发生顺序,还提供了一个类分析器,为每个被分析元素生 成一个 事件,还提供一个类写入器,由这些事件的序列生成经过编译的类。 而在采用基于对象的模型时,类用一个对象树表示,每个对象表示类的一部分,比如类本身、 一个字段、一个方法、一条指令,等等,每个对象都有一些引用,指向表示其组成部分的对象。 基 于对象的 API 提供了一种方法,可以将表示一个类的事件序列转换为表示同一个类的对象树, 也 可以反过来,将对象树表示为等价的事件序列。换言之,基于对象的 API 构建在基于事件的 API 之上。 这两个 API 可以与“用于 XML 的简单 API”(Simple API for XML,SAX)和用于 XML 文 档的“文档对象模型(Document Object Model,DOM)API”相比较:基于事件的 API 类似于 SAX,而基于对象的 API 类似于 DOM。基于对象的 API 构建在基于事件的 API 之上,类似于 DOM 可在 SAX 的上层提供。 ASM 之所以要提供两个 API,是因为没有哪种 API 是最佳的。实际上,每个 API 都有自己 的优缺点:
2 / 101

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐