#------------------------------------------------------------------------------ # mach file description # # Since Java bytecode and Mach-O universal binaries have the same magic number the test # must be preformed in the same "magic" sequence to get both right. The long # at offset 4 in a universal binary tells the number of architectures. The short at # offset 4 in a Java bytecode file is the compiler minor version and the # short at offset 6 is the compiler major version. Since there are only # only 18 labeled Mach-O architectures at current, and the first released # Java class format was version 43.0, we can safely choose any number # between 18 and 39 to test the number of architectures against # (and use as a hack). # 0 belong 0xcafebabe >4 belong >19 compiled Java class data, >>6 beshort x version %d. >>4 beshort x \b%d >4 belong 1 Mach-O universal binary with 1 architecture >4 belong >1 # The following is necessary to support java class files. >>4 belong <20 Mach-O universal binary with %ld architectures #>>4 belong <0xffff Mach-O universal binary with %ld architectures # 0 lelong&0xfffffffe 0xfeedface Mach-O >0 byte 0xcf 64-bit >12 lelong 1 object >12 lelong 2 executable >12 lelong 3 fixed virtual memory shared library >12 lelong 4 core >12 lelong 5 preload executable >12 lelong 6 dynamically linked shared library >12 lelong 7 dynamic linker >12 lelong 8 bundle >12 lelong 9 dynamically linked shared library stub >12 lelong >9 >>12 lelong x filetype=%ld >4 lelong <0 >>4 lelong x architecture=%ld >4 lelong 1 vax >4 lelong 2 romp >4 lelong 3 architecture=3 >4 lelong 4 ns32032 >4 lelong 5 ns32332 >4 lelong 6 m68k >4 lelong 7 i386 >4 lelong 8 mips >4 lelong 9 ns32532 >4 lelong 10 m98k >4 lelong 11 hppa >4 lelong 12 arm >4 lelong 13 m88k >4 lelong 14 sparc >4 lelong 15 i860 >4 lelong 16 alpha >4 lelong 17 rs6000 >4 lelong 18 ppc >4 lelong 16777223 x86_64 >4 lelong 16777234 ppc64 >4 lelong >16777234 >>4 lelong x architecture=%ld # 0 belong&0xfffffffe 0xfeedface Mach-O >3 byte 0xcf 64-bit >12 belong 1 object >12 belong 2 executable >12 belong 3 fixed virtual memory shared library >12 belong 4 core >12 belong 5 preload executable >12 belong 6 dynamically linked shared library >12 belong 7 dynamic linker >12 belong 8 bundle >12 belong 9 dynamically linked shared library stub >12 belong >9 >>12 belong x filetype=%ld >4 belong <0 >>4 belong x architecture=%ld >4 belong 1 vax >4 belong 2 romp >4 belong 3 architecture=3 >4 belong 4 ns32032 >4 belong 5 ns32332 >4 belong 6 for m68k architecture # from NeXTstep 3.0 # i.e. mc680x0_all, ignore # >>8 belong 1 (mc68030) >>8 belong 2 (mc68040) >>8 belong 3 (mc68030 only) >4 belong 7 i386 >4 belong 8 mips >4 belong 9 ns32532 >4 belong 10 m98k >4 belong 11 hppa >4 belong 12 arm >4 belong 13 m88k >4 belong 14 sparc >4 belong 15 i860 >4 belong 16 alpha >4 belong 17 rs6000 >4 belong 18 ppc >4 belong 16777223 x86_64 >4 belong 16777234 ppc64 >4 belong >16777234 >>4 belong x architecture=%ld