java中ASM框架有什么用

发布时间:2021-10-11 10:59:26 作者:小新
来源:亿速云 阅读:123

这篇文章主要为大家展示了“java中ASM框架有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中ASM框架有什么用”这篇文章吧。

简介

ASM是java字节码操作框架,利用该框架可以达到动态修改java运行对象代码的目的,也可以实现动态代理等功能;

线程和栈帧

要了解ASM字节码操作,先要熟悉jvm线程与栈帧结构,jvm开辟一个线程,便会开辟属于这个线程虚拟机栈,本地方法栈,程序计数器,其主要作用如下:

基本类型

java字节码中的类型表达和java代码是不一样的,在java字节码中利用如下符号来表达基本类型:

java类型type含义
booleanZ布尔
charC字符
byteB字节
shortS短整型
intI整型
longJ长整型
floatF浮点数
referenceL类的引用
voidV
doubleD双精度浮点型
ObjectLjava/lang/Object;对象
int[][I整型数组
Object[][][[Ljava/lang/Object;对象数组

注: L+className;代表某类的引用(";"不能省略)

字节码实例:

Java代码字节码表示注释
double[][][[D
Object run(int i,double d,Thread t)(IDLjava/lang/Thread)Ljava/lang/Object;(方法参数字节码类型)方法返回参数类型

字节码指令操作

字节码指令操作其实主要操作局部变量表和操作数栈,具体流程是:load局部变量到操作数栈,然后给cpu下达执行指令,然后将操作数栈栈顶元素弹出,从而实现一个操作;
字节码指令都有一定的格式:[type+]op["_"+value];

其中type根据基本类型可以为:i(int 整数),s(short 短整数),b(byte 字节),c(char字符),l(long长整数),d(double双精度浮点数),f(float 浮点数),a(reference 引用);
value指的是操作数,如果操作数为负数时需要添加'm"前缀,例如iconstant_m1表示将-1压栈;如果操作数值超过一定大小,则会将该操作数存放在常量池,用#indexbyte表示其位置;
op指的是操作码,通常用一个字节表示;

字节码指令操作主要分为九大指令:

加载和存储指令

加载指令主要是将局部变量和常量压入到操作数栈,具体指令有:

如下图所示:

加载存储指令.png

运算指令

运算指令有以下几种:

类型转换指令

类型转换指令有以下几种:

对象创建和访问指令

对象创建和访问指令通常需要两个操作数indexbyte1和indexbyte2

操作数栈管理指令

字等于两个字节,半个slot,16位

控制转移指令:

控制转移指令分为跳转指令和比较指令,无条件跳转指令,表跳转指令,异常跳转指令;
跳转指令:

比较指令:

无条件转移指令:

表跳转指令:

异常跳转指令:

方法调用和返回指令:

同步方法指令:

以上是“java中ASM框架有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. Eureka框架有什么用
  2. bootstrap框架有什么用途

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java asm

上一篇:ThinkPHP5中的SQL注入漏洞是什么

下一篇:ThinkPHP命令如何执行漏洞

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》