当时, 这个魔数并没有什么特别的意义, 也看不出来有什么重要的, 或许很快就会消失在历史中。所以 CAFEBABE 成为 class 文件的魔数, CAFEDEAD 成为持久对象的魔数. 但没多久持久化对象(persistent object)技术真的消失了, 就如同魔数 CAFEDEAD 所蕴含的一样 —— 后来用的是RMI技术。
原创
2022-02-22 14:12:00
241阅读
一个文件里面的内容到底是啥?用惯了Windows的人肯定是看后缀。但是后缀这个东西说改就改,不可靠。所以,最保险的还是把文件类型信息写到文件里面,通常来说,也就是写到文件开头的那几个字节。这是最方便,最快捷的用来辨别一个文件真实内容的方法。下面举几个例子:
Java class文件的魔数
每一个Java Class文件都是以0x CAFEBABE开头的。Java这么做的原因就是为了快速判断一
转载
2018-10-11 10:05:00
108阅读
2评论
第一关:http://cafebabe.cc/nazo/ 点此处第二关:http://cafebabe.cc/nazo/level2.html 后缀改为level3.html第三关:http://cafebabe.cc/nazo/level3.html 在注释中发现下一关地址:helloworld.html第四关:http://cafebabe.cc/nazo/helloworld.html 在j
原创
2015-06-14 18:20:46
8801阅读
啊,终于腾出时间来玩这个游戏了,顺手写一下攻略吧……第0关:http://cafebabe.cc/nazo/第一关:第一关很简单 点一下就好了http://cafebabe.cc/nazo/level2.html第二关也很简单http://cafebabe.cc/nazo/level3.html第三...
原创
2021-07-16 14:38:01
965阅读
下面的程序是对两个十六进制(hex)字面常量进行相加,然后打印出十六进制的结果。这个程序会打印出什么呢? 看起来很明显,该程序应该打印出1cafebabe。毕竟,这确实就是十六进制数字10000000016与cafebabe16的和。该程序使用的是long型运算,它可以支持16位十六进制数,因此运算
转载
2018-10-23 23:04:00
101阅读
2评论
可以在IDEA中安装一个插件jclasslib,方便查看类的字节码。也可以在命令行中通过javap -verbose xxx.class查看字节码。更极客一点的话,可以通过linux命令xxd xxx.class查看以十六进制显示的class文件。对于下图中的简单的类:其class文件如下:文件开头的四个字节的十六进制为cafebabe,称之为魔数。任何class文件都以cafebabe开头。魔数
转载
2023-08-24 16:42:22
37阅读
下面的程序是对两个十六进制(hex)字面常量进行相加,然后打印出十六进制的结果。这个程序会打印出什么呢? 看起来很明显,该程序应该打印出 1cafebabe。毕竟,这确实就是十六进制数字 10000000016 与 cafebabe16 的和。该程序使用的是 long 型运算,它可以支持 16 位十六进制数,因此运算溢出是不可能的。然而,如果你运行该程序,你就会发现它打印出来的是 caf
转载
2023-12-19 21:37:22
88阅读
一、一切由运行时错误引起dalvikvm Could not find class '引用包.类', referenced from method... 其实在编译时也会见到如下错误: [dx]
[dx] trouble processing:
[dx] bad class file magic (cafebabe) or version (0033.0
转载
2023-10-16 06:39:53
64阅读
文章目录字节码详解前言万事开头难什么是字节码Class文件hello worldclass结构为什么是``CafeBabe````Unsupported major.minor version 51.0``类的访问标识常量池Field-字段Methods-方法Descriptors-描述attribute-属性javap字节码技术应用ASM主要类介绍ClassVisitorClassWriter
Java类的加载过程JVM将类加载过程分为三步:装载、链接、初始化,其中链接分为三步:验证、准备、解析。类的加载过程装载load:查找并加载类的二进制数据;判断文件格式是否正确(如著名的魔数:CAFEBABE);在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。链接link:验证verify:确保被加载类的正确性;准备prepara
转载
2023-07-16 12:31:49
46阅读
一、进制知识 我们看到的字节码文件是十六进制。我们用魔数cafebabe来练习一下进制转换:十六进制:c a f e b a b e 十进制: 12 10 15 14 11 10 11 14 二进制:1100 1010 1111 1110 …二、不同语言在JVM上运行的本质 只要是复合JVM规范的字节码文件都能在虚拟机上运行。三、小端与大端大端模式,是指数据的高字节保存在内存的低地址中,而数据的低
一、Java代码执行全流程:1.javac指令将.java文件编译为.class文件,也就是字节码文件。 2.通过类加载器加载字节码文件,这里的类加载方式采用双亲委派方式 3.链接 链接分为三个步骤,分别是验证,准备,解析。验证:验证魔数(字节码文件文件前4个字节 cafebabe),如果魔数不对的话不是的话就拒绝加载这个文件,同时还会验证Jdk版本,高版本的jvm可以加载低版本的.class文件
转载
2023-09-05 23:06:58
136阅读
前言: class文件是一个16进制的文件,可以通过Hex Editor工具打开,打开后如下: 注:提供两个文档帮助我们阅读class文件概述我们先对这个class文件有个总体的了解魔数所有的由Java编译器编译而成的class文件的前4个字节都是“0xCAFEBABE”。(简称cafebabe-咖啡宝贝) 它的作用在于:当JVM在尝试加载某个文件到内存中来的时候,会首先判断此class文件有没有
一个文件里面的内容到底是啥?用惯了Windows的人肯定是看后缀。但是后缀这个东西说改就改,不可靠。所以,最保险的还是把文件类型信息写到文件里面,通常来说,也就是写到文件开头的那几个字节。这是最方便,最快捷的用来辨别一个文件真实内容的方法。下面举几个例子:Java class文件的魔数每一个Java Class文件都是以0x CAFEBABE开头的。Java这么做的原因就是为了快速判断一个文件是不
原创
2022-04-07 10:22:58
288阅读
一个文件里面的内容到底是啥?用惯了Windows的人肯定是看后缀。但是后缀这个东西说改就改,不可靠。所以,最保险的还是把文件类型信息写到文件里面,通常来说,也就是写到文件开头的那几个字节。这是最方便,最快捷的用来辨别一个文件真实内容的方法。下面举几个例子:
Java class文件的魔数每一个Java Class文件都是以0x CAFEBABE开头的。Java这么做的原因就是为了快速判断一个
转载
2023-08-15 22:54:20
57阅读
魔数魔数存在于每个Class文件的前4个字节,其实在很多文件中都存在,像jpeg在文件头中都存在魔数,其目的是为了标识文件类型。可知虚拟机区分文件类型并不是通过区分文件扩展名,而是通过魔数。Class文件中的魔数叫做 CAFEBABE 。 做一个实验:将Hello.java的后缀名改成class,然后去执行这个class文件,看jvm是否能识别出来。他说与class文件的魔数值是完全不同
java字节码划分区域图中u4、u2等表示的是字节u4就是4个字节u2就是2个字节以此类推idea查看class的十六进制的方式看这里开始分析准备解析其中魔术就是magic它表示的是字节码的开头CAFEBABE这个单词 然后次版本号也就是minor version 然后主版本号majorversion 然后常量池。。。现在应该会看图了后面的不写了对应的次版本号与主版本号然后常量池类型图 先看一个简
Java之父——詹姆斯 • 高斯林(James Gosling)曾说过:他以前经常和朋友一起到圣米歇尔巷吃午餐,当地有个传说,感恩至死 (Grateful Dead) 乐队在成名前曾在这里表演,毫无疑问地说,这是一个流行的地方,绝对是乐队的发达之地,后来这个乐队甚至在这里建造了一个佛教圣地,因此这里被他们称为死亡咖啡(Dead Cafe)。当时詹姆斯 • 高斯林(James Gosling)正好在需要一些魔数(magic number),而恰好 cafe 这个词可以是一个数,再加上四个数字就能作为一个魔数(magic number),于是想到了用 baby 这个词,于是 CAFEBABE 便诞生了。
原创
2023-07-01 17:26:48
1490阅读
点赞
1评论