BaiFan
文章目录
  1. 1. 1.1 目的

ASM的简单介绍-目的。

1.1 目的

应用分析,代码生成和转换在很多情境下是非常有用的技术:

  • 应用分析囊括了从一个简单的语法解析到全语义分析,能够找出潜藏在应用中的漏洞,发现应用中不会被调用的代码段,
    以及逆向工程代码等。
  • 代码生成通常在编译器中使用。即包括传统的编译器,也包括分布式应用中stub和skeleton的编译器,以及运行时编译器(JIT)等。
  • 代码转换通常用来做应用的性能调优,或者代码混淆。利用面向切面的编程模式,在应用中植入debug或者性能监控代码。

上面所述的技术可以应用于任何编程语言,只不过在实现上的难易程度取决于编程语言。
对于Java在这种情况下,可以在源码或者字节码中应用。
如果在字节码中应用,显而易见的一个优点是,你不需要源文件。
因此可以在任何应用中都可以使用代码转换,包括闭源代码和商业代码。
另一个好处是,你可以对编译后的字节码做分析、生成新的字节码或者转换字节码,
只需要它们在Java虚拟机(在运行时生成和编译源代码是可以的,但是非常耗时,而且需要一个完成的Java编译环境支持)载入代码之前完成即可。
还有一个好处是工具包,例如stub编译器或者切面植入器,对用户来说是透明的。
由于程序分析、代码生成和代码转换有很多种技术可以实现,所以有很多相应的工具也被发明了出来。
ASM[1]就是一款针对Java的工具,它被设计成可以在运行时使用,同样也可以在离线状态下使用,对class进行生成和转换。
ASM库对编译后的class进行工作,它设计的速度快、内存消耗小。
速度越快越重要,在动态代理class的生成和class的转换时,尽可能确保运行中的应用不会被ASM拖慢,
同时内存消耗越小越好,避免因为环境限制,对本身消耗内存就小的应用来说,产生内存膨胀。
ASM不是唯一针对Java字节码生成和转换的工具库,但是它是全新且效率最高的。
可以在http://asm.objectweb.org中下载依赖库。

ASM的主要优点如下:

  • 它有一个简单,精心设计和模块化的API,易于使用。
  • 它有完美的说明使用文档,并有一个Eclipse的相关插件。
  • 它提供了最新的Java版本,Java 7的支持(ASM 5支持Java 8,本书是ASM 4)。
  • 它体积小,速度快,而且非常强大。
  • 对新用户来说,它有大量的用户和社区支持。
  • 它的开源许可允许你通过任何方式使用它。

[1]. ASM的并不代表任何含义:它只是引用了C语言中__asm__关键字,该关键字允许C语言的代码块使用汇编实现。

文章目录
  1. 1. 1.1 目的