鱼C论坛

 找回密码
 立即注册
查看: 5080|回复: 9

[技术交流] 关于 0xCAFEBABE 的秘密(文末有彩蛋)

[复制链接]
发表于 2017-1-17 16:46:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 零度非安全 于 2017-1-17 16:56 编辑

知道这个数值的含义请不要笑我哈 ,这个数值也是我昨天无意之间发现的 ,其实系统学习过的 JVM 的鱼油们

都知道这个数值的含义。那我是怎么无意之间发现的呢?学 Java 这么久,我都不知道 Java 源文件编译出来的 class 文件里面到底有什么东西?所以我想自己一探究竟,但问题来了,我用什么软件打开这个 class 文件呢?咦,记事

本,我就老老实实的用记事本随便打开一个 class 文件,丫的,这什么东西呀?一堆乱码,看不懂,如下所示:

0.png

于是乎我直接把这个 class 文件拖入到 UltraEdit,这下看上去舒服多了,嗯,没错,显示了该文件的十六进制,如下所示:

1.png

大致浏览了下,丫的,还是看不懂,伤心,但接下来我还是多拖入几个 class 文件试试,如下:

0.gif

不知这样看你们发现了什么没有,对,没错,每个 class 文件的前面 4 个字节基本没变。 刮刮有奖

每个 class 文件的头 4 个字节都是“CAFEBABE”,即十六进制数 0xCAFEBABE,我想没这么巧吧,个个 class 文件的十

六进制都是这个数开头的,这其中一定有什么不可告人的秘密

00.jpg

探索继续。。。。。。

抓住这个点后,我便开始疯狂查找与关键词“0xCAFEBABE”有关的资料(其实我也是对知识的一种渴望),将查找的资料整理如下:

我们先来看一张图片

Magic Number.png

其实在这张图片里已经把这个关键词的由来说的很清楚了,说简单点,这个 0xCAFEBABE 就是为了让 JVM 识别它是一个

class 文件,并将其称为魔数(Magic Number),网上关于这个解释也很多,个人认为他们解释还不如 Java 创作者解释清楚,毕竟我们要原滋原味的,如下所示:

Magic Number.png

为了有些鱼油看不清,我就把这段话手敲下来。
James Gosling explained this:

We used to go to lunch at a place called St Michael's Alley. According to local legend, in the deep dark past, the Grateful Dead used to perform there before they made it big. It was a pretty funky place that was definitely a Grateful Dead Kinda Place. When Jerry died, they even put up a little Buddhist-esque shrine. When we used to go there, we referred to the place as Cafe Dead. Somewhere along the line it was noticed that this was a HEX number. I was re-vamping some file format code and needed a couple of magic numbers: one for the persistent object file, and one for classes. I used CAFEDEAD for the object file format, and in grepping for 4 character hex words that fit after "CAFE" (it seemed to be a good theme) I hit on BABE and decided to use it. At that time, it didn't seem terribly important or destined to go anywhere but the trash-can of history. So CAFEBABE became the class file format, and CAFEDEAD was the persistent object format. But the persistent object facility went away, and along with it went the use of CAFEDEAD - it was eventually replaced by RMI.


咳咳,对于英语基础不好的鱼油阅读起来估计有点难度,不用担心,下面我已经帮你们翻译好了(翻译的不是很好 )。

过去我们常常在米迦勒巷吃午饭,据当地的传说,在那深暗的过去,一些死去的人都心存感激,因为这里使他们长大,并在这里工作。这里是一个有趣的地方,绝对是一个感恩而死的地方。杰瑞死的时候,他们甚至提出了一个小小的佛教风格的神社。当我们过去去那里,那个咖啡馆不在了,消失了。沿着线的某处,人们注意到这是一个十六进制数。我需要两个神奇的数字来修补一些文件格式的代码:一个是持久对象文件,另一个是类。我用CAFEDEAD用于对象文件格式,并用grep去寻找能代表一个4个字节的十六进制的单词,“咖啡馆”这个单词非常适合(这似乎是一个很好的主题),但我想到了宝贝(BABE),并决定用它。由于不堪的历史原因,并没有显得特别重要或注定要去任何地方,所以CAFEBABE成为类文件格式,和CAFEDEAD成为持久对象的格式。但是后来持久对象消失了,那么CAFEDEAD自然而然也消失了- 最终取代它的是RMI。


我们就这样结束了吗?然而并没有,鱼油们不妨将十六进制数 0xCAFEBABE 转化为十进制数看看,看看你们能从中抓出什么猫腻来? 神秘见彩蛋。


彩蛋:
游客,如果您要查看本帖隐藏内容请回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-17 18:52:29 | 显示全部楼层
可以的我想看看彩蛋

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-17 19:03:05 | 显示全部楼层
zg5174 发表于 2017-1-17 18:52
可以的我想看看彩蛋

这是一颗神奇的蛋蛋
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-17 22:27:37 | 显示全部楼层
怎么有点像鬼片啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-17 22:59:29 | 显示全部楼层
本帖最后由 零度非安全 于 2017-1-17 23:05 编辑
alltolove 发表于 2017-1-17 22:27
怎么有点像鬼片啊


看来你恐怖片看多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-18 17:51:50 | 显示全部楼层
23333

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-18 18:01:46 | 显示全部楼层

这位为何如此开心呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 10:49:21 | 显示全部楼层
3405691582
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-2 16:42:34 | 显示全部楼层
??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-13 20:56:47 | 显示全部楼层
想看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表