一把小刀,直插 class 文件的小心脏(4)

简介: 一把小刀,直插 class 文件的小心脏

08、属性表


属性表是 class 文件中的最后一部分,通常出现在字段和方法中。


来看这样一段代码。


public class AttributeTest {

   public static final int DEFAULT_SIZE = 128;

}


只有一个常量 DEFAULT_SIZE,它属于字段中的一种,就是加了 final 的静态变量。先通过 jclasslib 看一下它当中一个很重要的属性——ConstantValue,用来表示静态变量的初始值。


image.png


Attribute name index 指向常量池中值为“ConstantValue”的常量。

Attribute length 的值为固定的 2,因为索引只占两个字节的大小。

Constant value index 指向常量池中具体的常量,如果常量类型为 int,指向的就是 CONSTANT_Integer_info。

我画了一副图,可以完整的表示字段的结构,包含属性表在内。


image.png


对应到 class 文件中的位置如下图所示。


image.png


来看下面这段代码。


public class MethodCode {
    public static void main(String[] args) {
        foo();
    }
    private static void foo() {
    }
}



main 方法中调用了 foo 方法。通过 jclasslib 看一下它当中一个很重要的属性——Code, 方法的关键信息都存储在里面。


image.png


Attribute name index 指向常量池中值为“Code”的常量。

Attribute length 为属性值的长度大小。

bytecode 存储真正的字节码指令。

exception table 表示方法内部的异常信息。

maximum stack size 表示操作数栈的最大深度,方法执行的任意期间操作数栈深度都不会超过这个值。

maximum local variable 表示临时变量表的大小,注意,并不等于方法中所有临时变量的数量之和,当一个作用域结束,内部的临时变量占用的位置就会被替换掉。

code length 表示字节码指令的长度。

对应 class 文件中的位置如下图所示。


image.png


到此为止,class 文件的内部算是剖析得差不多了,希望能对大家有所帮助。第一次拿刀,手有点颤,如果哪里有不足的地方,欢迎大家在评论区毫不留情地指出来!

相关文章
|
3月前
|
C++
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
59 1
|
12月前
每次放一个细胞,打印心脏或上千年,斯坦福大学如何加快3D打印心脏?
每次放一个细胞,打印心脏或上千年,斯坦福大学如何加快3D打印心脏?
|
数据库
买手机数据线特别要注意的地方
买手机数据线特别要注意的地方
101 0
|
机器学习/深度学习 存储 人工智能
用视频插帧开一个流体力学分析的外挂
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,其中视频插帧可以用于现有超高速相机增强,用于粒子测量PIV、BOS背景纹影等领域。本文为视觉流体力学分析预处理中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云视觉人工智能的API细节进行了分析。
359 0
用视频插帧开一个流体力学分析的外挂
|
算法 安全 C++
科学家小蓝来到了一个荒岛,准备对这个荒岛进行探测考察。 小蓝使用了一个超声定位设备来对自己进行定位。为了使用这个设备,小蓝需要在不同的点分别安装一个固定的发射器和一个固定的接收器。小蓝手中还有一个移
科学家小蓝来到了一个荒岛,准备对这个荒岛进行探测考察。 小蓝使用了一个超声定位设备来对自己进行定位。为了使用这个设备,小蓝需要在不同的点分别安装一个固定的发射器和一个固定的接收器。小蓝手中还有一个移
221 0
科学家小蓝来到了一个荒岛,准备对这个荒岛进行探测考察。 小蓝使用了一个超声定位设备来对自己进行定位。为了使用这个设备,小蓝需要在不同的点分别安装一个固定的发射器和一个固定的接收器。小蓝手中还有一个移
树的储存形势&代码实现(跑路人笔记1)
树的储存形势&代码实现(跑路人笔记)
树的储存形势&代码实现(跑路人笔记1)
|
存储 C语言 索引
一把小刀,直插 class 文件的小心脏(3)
一把小刀,直插 class 文件的小心脏
127 0
一把小刀,直插 class 文件的小心脏(3)
|
存储 Java
一把小刀,直插 class 文件的小心脏(1)
一把小刀,直插 class 文件的小心脏
55 0
一把小刀,直插 class 文件的小心脏(1)
|
存储 数据可视化 Java
一把小刀,直插 class 文件的小心脏(2)
一把小刀,直插 class 文件的小心脏
97 0
一把小刀,直插 class 文件的小心脏(2)