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

声明:

Author:赵志乾

Date:2018-6-18

Declaration:All Right Reserved!!!



背景知识:

1、魔数

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

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

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

2、魔数与扩展名

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

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


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

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

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

2、字节码文件的版本号

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

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



邮箱:zhaozhiqian001@163.com

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫白小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值