[java虚拟机]--(2)字节码文件--(2)魔数与版本

声明:

Author:赵志乾

Date:2018-6-18

Declaration:All Right Reserved!!!



背景知识:

1、魔数

魔数是一个术语,在软件领域通常有以下两种含义:

代码中出现的,没有任何解释的数字常量或字符串常量。

文件起始的几个字节,用于表示文件的类型。

2、魔数与扩展名

    文件起始的几个字节可以用来描述文件的类型,那文件的扩展名也可以用来表示文件的类型。两者岂不是功能重叠了?其实,文件扩展名是给人看的,其可以随意的被改动。比如在linux系统中,文件的扩展名其实并不重要,或者说linux系统中的文件本身就没有扩展名。也就是说linux系统中的文件扩展名是基于我们的习惯加上的。

    随着文件类型的不断增多,某些工具软件或应用软件为了便于文件的管理,会强制校验文件的扩展名。但这种校验方式其实并不可靠,因为扩展名可以轻易的改动。为此,基于安全层面的考虑,文件类型的校验应该使用文件起始的魔数来进行。


魔数与版本号:
1、字节码文件的魔数

    字节码文件的魔数为4个字节,固定值:0xCAFEBABE,其作用是表示该文件是否为一个可以被虚拟机接受的字节码文件。通过某些工具,可以更改文件的魔数,所以对虚拟机而言,单纯的依靠魔数来确定文件是否合法并不可靠。

注:虚拟机在加载字节码文件时,除了校验魔数之外,还会校验文件中的内容是否符合字节码文件规范,从而保证文件的合法性。

2、字节码文件的版本号

    紧随魔数的4个字节为文件版本号,依次为次版本号和主版本号。由于字节码文件格式随着这技术的发展,也在不断的演进,为了让虚拟机能够在加载时识别出当前字节码文件格式是否已得到支持,在文件中添加了文件版本号。

注:文件版本号具有向下兼容性,即高版本的虚拟机能够加载低版本的字节码文件。



邮箱:[email protected]

参考资料:《深入理解java虚拟机》--周志明


猜你喜欢

转载自blog.csdn.net/zhaoyaxuan001/article/details/80725928