xref: /dflybsd-src/contrib/file/magic/Magdir/cafebabe (revision 739f0ef867128a933e021db3d831e906fcafd825)
1f72f8299SJan Lentfer
2327e51cbSPeter Avalos#------------------------------------------------------------------------------
3*3b9cdfa3SAntonio Huete Jimenez# $File: cafebabe,v 1.28 2022/07/01 23:24:47 christos Exp $
4327e51cbSPeter Avalos# Cafe Babes unite!
5327e51cbSPeter Avalos#
6e8af9738SPeter Avalos# Since Java bytecode and Mach-O universal binaries have the same magic number,
7e8af9738SPeter Avalos# the test must be performed in the same "magic" sequence to get both right.
8e8af9738SPeter Avalos# The long at offset 4 in a Mach-O universal binary tells the number of
9e8af9738SPeter Avalos# architectures; the short at offset 4 in a Java bytecode file is the JVM minor
10e8af9738SPeter Avalos# version and the short at offset 6 is the JVM major version.  Since there are only
11327e51cbSPeter Avalos# only 18 labeled Mach-O architectures at current, and the first released
12327e51cbSPeter Avalos# Java class format was version 43.0, we can safely choose any number
13327e51cbSPeter Avalos# between 18 and 39 to test the number of architectures against
14327e51cbSPeter Avalos# (and use as a hack). Let's not use 18, because the Mach-O people
15327e51cbSPeter Avalos# might add another one or two as time goes by...
16327e51cbSPeter Avalos#
17e8af9738SPeter Avalos### JAVA START ###
18970935fdSSascha Wildner# Reference:	http://en.wikipedia.org/wiki/Java_class_file
19970935fdSSascha Wildner# Update:	Joerg Jenderek
20327e51cbSPeter Avalos0	belong		0xcafebabe
21970935fdSSascha Wildner>4	ubelong		>30		compiled Java class data,
22e8af9738SPeter Avalos!:mime	application/x-java-applet
23970935fdSSascha Wildner#!:mime	application/java-byte-code
24970935fdSSascha Wildner!:ext	class
25970935fdSSascha Wildner>>6	ubeshort	x	        version %d.
26970935fdSSascha Wildner>>4	ubeshort	x       	\b%d
27970935fdSSascha Wildner# for debugging purpose version as hexadecimal to compare with Mach-O universal binary
28614728caSSascha Wildner#>>4	ubelong		x       	(%#8.8x)
2979343712SPeter Avalos# Which is which?
30970935fdSSascha Wildner# https://docs.oracle.com/javase/specs/jvms/se6/html/ClassFile.doc.html
31970935fdSSascha Wildner#>>4	belong		0x002b		(Java 0.?)
3279343712SPeter Avalos#>>4	belong		0x032d		(Java 1.0)
3379343712SPeter Avalos#>>4	belong		0x032d		(Java 1.1)
3479343712SPeter Avalos>>4	belong		0x002e		(Java 1.2)
3579343712SPeter Avalos>>4	belong		0x002f		(Java 1.3)
3679343712SPeter Avalos>>4	belong		0x0030		(Java 1.4)
3779343712SPeter Avalos>>4	belong		0x0031		(Java 1.5)
3879343712SPeter Avalos>>4	belong		0x0032		(Java 1.6)
39c30bd091SSascha Wildner>>4	belong		0x0033		(Java 1.7)
40c30bd091SSascha Wildner>>4	belong		0x0034		(Java 1.8)
41970935fdSSascha Wildner>>4	belong		0x0035		(Java SE 9)
42970935fdSSascha Wildner>>4	belong		0x0036		(Java SE 10)
43970935fdSSascha Wildner>>4	belong		0x0037		(Java SE 11)
44970935fdSSascha Wildner>>4	belong		0x0038		(Java SE 12)
45970935fdSSascha Wildner>>4	belong		0x0039		(Java SE 13)
46970935fdSSascha Wildner>>4	belong		0x003A		(Java SE 14)
47*3b9cdfa3SAntonio Huete Jimenez>>4	belong		0x003B		(Java SE 15)
48*3b9cdfa3SAntonio Huete Jimenez>>4	belong		0x003C		(Java SE 16)
49*3b9cdfa3SAntonio Huete Jimenez>>4	belong		0x003D		(Java SE 17)
50*3b9cdfa3SAntonio Huete Jimenez>>4	belong		0x003E		(Java SE 18)
51*3b9cdfa3SAntonio Huete Jimenez>>4	belong		0x003F		(Java SE 19)
52*3b9cdfa3SAntonio Huete Jimenez>>4	belong		0x0040		(Java SE 20)
53970935fdSSascha Wildner# pool count unequal zero
54614728caSSascha Wildner#>>8	beshort		x	        \b, pool count %#x
55970935fdSSascha Wildner# pool table
56614728caSSascha Wildner#>>10	ubequad		x	        \b, pool %#16.16llx...
5779343712SPeter Avalos
58e8af9738SPeter Avalos0	belong		0xcafed00d	JAR compressed with pack200,
59e8af9738SPeter Avalos>5	byte		x		version %d.
60e8af9738SPeter Avalos>4	byte		x		\b%d
61e8af9738SPeter Avalos!:mime	application/x-java-pack200
6279343712SPeter Avalos
6379343712SPeter Avalos
6479343712SPeter Avalos0	belong		0xcafed00d	JAR compressed with pack200,
65e8af9738SPeter Avalos>5	byte		x		version %d.
66e8af9738SPeter Avalos>4	byte		x		\b%d
6779343712SPeter Avalos!:mime	application/x-java-pack200
68e8af9738SPeter Avalos
69e8af9738SPeter Avalos### JAVA END ###
70e8af9738SPeter Avalos### MACH-O START ###
71970935fdSSascha Wildner# URL:		https://en.wikipedia.org/wiki/Mach-O
72e8af9738SPeter Avalos
73e8af9738SPeter Avalos0	name		mach-o		\b [
74970935fdSSascha Wildner# for debugging purpose CPU type as hexadecimal
75970935fdSSascha Wildner#>0	ubequad		x		CPU=%16.16llx
76970935fdSSascha Wildner# display CPU type as string like: i386 x86_64 ... armv7 armv7k ...
77e8af9738SPeter Avalos>0	use		mach-o-cpu	\b
78970935fdSSascha Wildner# for debugging purpose print offset to 1st mach_header like:
79970935fdSSascha Wildner# 1000h 4000h seldom 2d000h 88000h 5b000h 10e000 h
80614728caSSascha Wildner#>8	ubelong		x		at %#x offset
81c30bd091SSascha Wildner>(8.L)	indirect	x		\b:
82e8af9738SPeter Avalos>0	belong		x		\b]
83e8af9738SPeter Avalos
84970935fdSSascha Wildner# Reference:	https://opensource.apple.com/source/cctools/cctools-949.0.1/
85970935fdSSascha Wildner#		include/mach-o/fat.h
86970935fdSSascha Wildner#		include/mach/machine.h
87e8af9738SPeter Avalos0	belong		0xcafebabe
88e8af9738SPeter Avalos>4	belong		1		Mach-O universal binary with 1 architecture:
89c30bd091SSascha Wildner!:mime application/x-mach-binary
90e8af9738SPeter Avalos>>8	use		mach-o		\b
91970935fdSSascha Wildner# nfat_arch; number of CPU architectures; highest is 18 for CPU_TYPE_POWERPC in 2020
92970935fdSSascha Wildner>4	ubelong		>1
93970935fdSSascha Wildner>>4	ubelong		<20		Mach-O universal binary with %d architectures:
94c30bd091SSascha Wildner!:mime application/x-mach-binary
95e8af9738SPeter Avalos>>>8	use		mach-o		\b
96970935fdSSascha Wildner>>>4	ubelong		>1
97970935fdSSascha Wildner>>>>28	use		mach-o		\b
98970935fdSSascha Wildner>>>4	ubelong		>2
99970935fdSSascha Wildner>>>>48	use		mach-o		\b
100970935fdSSascha Wildner>>>4	ubelong		>3
101970935fdSSascha Wildner>>>>68	use		mach-o		\b
102970935fdSSascha Wildner>>>4	ubelong		>4
103970935fdSSascha Wildner>>>>88	use		mach-o		\b
104970935fdSSascha Wildner>>>4	ubelong		>5
105970935fdSSascha Wildner>>>>108	use		mach-o		\b
106e8af9738SPeter Avalos
107e8af9738SPeter Avalos### MACH-O END ###
108