我理解java .class文件的结构,但是当我想解释原始十六进制数据时,我有点迷失了。
这是类文件的十六进制转储,不包括标头和常量池。
我理解标题是幻数,minor_version和major_version。似乎下一个值应该是访问标志。
此图表中的值是多少? 000000b0?我认为这将是一个简单的数字而不是十六进制值。
这个值是this_class,是可以确定类详细信息的常量池的索引吗?
答案 0 :(得分:2)
000000b0
不是数据的一部分。它是以下16个字节所在的内存地址。
两位十六进制数是实际数据。从左到右阅读它们。每行分为两组,每组8个,纯粹是为了计算内存地址等。
因此,为了间接回答您的问题,您可以通过简单地计算幻数,次要版本和主要版本使用的字节数来计算访问标记的位置。接下来会有访问标志。同样,要查找任何其他值(例如this_class),您必须计算出它们的偏移量并查看数据中的该位置。
你说你期望“简单的数字而不是十六进制的数字”,但这并不是真的有意义,因为十六进制值是简单的数字。它们仅仅代表基数为16而不是基数为10。网上有很多资源可以教你如何在两者之间进行转换。