1 2#------------------------------------------------------------------------------ 3# elf: file(1) magic for ELF executables 4# 5# We have to check the byte order flag to see what byte order all the 6# other stuff in the header is in. 7# 8# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? 9# 10# Created by: unknown 11# Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com> 12# Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support) 13# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support) 14# Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium) 15# Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures) 160 string \177ELF ELF 17>4 byte 0 invalid class 18>4 byte 1 32-bit 19>4 byte 2 64-bit 20>5 byte 0 invalid byte order 21>5 byte 1 LSB 22>>16 leshort 0 no file type, 23!:strength *2 24!:mime application/octet-stream 25>>16 leshort 1 relocatable, 26!:mime application/x-object 27>>16 leshort 2 executable, 28!:mime application/x-executable 29>>16 leshort 3 shared object, 30!:mime application/x-sharedlib 31>>16 leshort 4 core file 32!:mime application/x-coredump 33# Core file detection is not reliable. 34#>>>(0x38+0xcc) string >\0 of '%s' 35#>>>(0x38+0x10) lelong >0 (signal %d), 36>>16 leshort &0xff00 processor-specific, 37>>18 leshort 0 no machine, 38>>18 leshort 1 AT&T WE32100 - invalid byte order, 39>>18 leshort 2 SPARC - invalid byte order, 40>>18 leshort 3 Intel 80386, 41>>18 leshort 4 Motorola 42>>>36 lelong &0x01000000 68000 - invalid byte order, 43>>>36 lelong &0x00810000 CPU32 - invalid byte order, 44>>>36 lelong 0 68020 - invalid byte order, 45>>18 leshort 5 Motorola 88000 - invalid byte order, 46>>18 leshort 6 Intel 80486, 47>>18 leshort 7 Intel 80860, 48# The official e_machine number for MIPS is now #8, regardless of endianness. 49# The second number (#10) will be deprecated later. For now, we still 50# say something if #10 is encountered, but only gory details for #8. 51>>18 leshort 8 MIPS, 52>>>36 lelong &0x20 N32 53>>18 leshort 10 MIPS, 54>>>36 lelong &0x20 N32 55>>18 leshort 8 56# only for 32-bit 57>>>4 byte 1 58>>>>36 lelong&0xf0000000 0x00000000 MIPS-I 59>>>>36 lelong&0xf0000000 0x10000000 MIPS-II 60>>>>36 lelong&0xf0000000 0x20000000 MIPS-III 61>>>>36 lelong&0xf0000000 0x30000000 MIPS-IV 62>>>>36 lelong&0xf0000000 0x40000000 MIPS-V 63>>>>36 lelong&0xf0000000 0x50000000 MIPS32 64>>>>36 lelong&0xf0000000 0x60000000 MIPS64 65>>>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2 66>>>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2 67# only for 64-bit 68>>>4 byte 2 69>>>>48 lelong&0xf0000000 0x00000000 MIPS-I 70>>>>48 lelong&0xf0000000 0x10000000 MIPS-II 71>>>>48 lelong&0xf0000000 0x20000000 MIPS-III 72>>>>48 lelong&0xf0000000 0x30000000 MIPS-IV 73>>>>48 lelong&0xf0000000 0x40000000 MIPS-V 74>>>>48 lelong&0xf0000000 0x50000000 MIPS32 75>>>>48 lelong&0xf0000000 0x60000000 MIPS64 76>>>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2 77>>>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2 78>>18 leshort 9 Amdahl - invalid byte order, 79>>18 leshort 10 MIPS (deprecated), 80>>18 leshort 11 RS6000 - invalid byte order, 81>>18 leshort 15 PA-RISC - invalid byte order, 82>>>50 leshort 0x0214 2.0 83>>>48 leshort &0x0008 (LP64), 84>>18 leshort 16 nCUBE, 85>>18 leshort 17 Fujitsu VPP500, 86>>18 leshort 18 SPARC32PLUS - invalid byte order, 87>>18 leshort 20 PowerPC, 88>>18 leshort 22 IBM S/390, 89>>18 leshort 36 NEC V800, 90>>18 leshort 37 Fujitsu FR20, 91>>18 leshort 38 TRW RH-32, 92>>18 leshort 39 Motorola RCE, 93>>18 leshort 40 ARM, 94>>18 leshort 41 Alpha, 95>>18 leshort 0xa390 IBM S/390 (obsolete), 96>>18 leshort 42 Renesas SH, 97>>18 leshort 43 SPARC V9 - invalid byte order, 98>>18 leshort 44 Siemens Tricore Embedded Processor, 99>>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc., 100>>18 leshort 46 Renesas H8/300, 101>>18 leshort 47 Renesas H8/300H, 102>>18 leshort 48 Renesas H8S, 103>>18 leshort 49 Renesas H8/500, 104>>18 leshort 50 IA-64, 105>>18 leshort 51 Stanford MIPS-X, 106>>18 leshort 52 Motorola Coldfire, 107>>18 leshort 53 Motorola M68HC12, 108>>18 leshort 54 Fujitsu MMA, 109>>18 leshort 55 Siemens PCP, 110>>18 leshort 56 Sony nCPU, 111>>18 leshort 57 Denso NDR1, 112>>18 leshort 58 Start*Core, 113>>18 leshort 59 Toyota ME16, 114>>18 leshort 60 ST100, 115>>18 leshort 61 Tinyj emb., 116>>18 leshort 62 x86-64, 117>>18 leshort 63 Sony DSP, 118>>18 leshort 66 FX66, 119>>18 leshort 67 ST9+ 8/16 bit, 120>>18 leshort 68 ST7 8 bit, 121>>18 leshort 69 MC68HC16, 122>>18 leshort 70 MC68HC11, 123>>18 leshort 71 MC68HC08, 124>>18 leshort 72 MC68HC05, 125>>18 leshort 73 SGI SVx, 126>>18 leshort 74 ST19 8 bit, 127>>18 leshort 75 Digital VAX, 128>>18 leshort 76 Axis cris, 129>>18 leshort 77 Infineon 32-bit embedded, 130>>18 leshort 78 Element 14 64-bit DSP, 131>>18 leshort 79 LSI Logic 16-bit DSP, 132>>18 leshort 80 MMIX, 133>>18 leshort 81 Harvard machine-independent, 134>>18 leshort 82 SiTera Prism, 135>>18 leshort 83 Atmel AVR 8-bit, 136>>18 leshort 84 Fujitsu FR30, 137>>18 leshort 85 Mitsubishi D10V, 138>>18 leshort 86 Mitsubishi D30V, 139>>18 leshort 87 NEC v850, 140>>18 leshort 88 Renesas M32R, 141>>18 leshort 89 Matsushita MN10300, 142>>18 leshort 90 Matsushita MN10200, 143>>18 leshort 91 picoJava, 144>>18 leshort 92 OpenRISC, 145>>18 leshort 93 ARC Cores Tangent-A5, 146>>18 leshort 94 Tensilica Xtensa, 147>>18 leshort 97 NatSemi 32k, 148>>18 leshort 106 Analog Devices Blackfin, 149>>18 leshort 113 Altera Nios II, 150>>18 leshort 0xae META, 151>>18 leshort 0x3426 OpenRISC (obsolete), 152>>18 leshort 0x8472 OpenRISC (obsolete), 153>>18 leshort 0x9026 Alpha (unofficial), 154>>20 lelong 0 invalid version 155>>20 lelong 1 version 1 156>>36 lelong 1 MathCoPro/FPU/MAU Required 157>5 byte 2 MSB 158>>16 beshort 0 no file type, 159!:mime application/octet-stream 160>>16 beshort 1 relocatable, 161!:mime application/x-object 162>>16 beshort 2 executable, 163!:mime application/x-executable 164>>16 beshort 3 shared object, 165!:mime application/x-sharedlib 166>>16 beshort 4 core file, 167!:mime application/x-coredump 168#>>>(0x38+0xcc) string >\0 of '%s' 169#>>>(0x38+0x10) belong >0 (signal %d), 170>>16 beshort &0xff00 processor-specific, 171>>18 beshort 0 no machine, 172>>18 beshort 1 AT&T WE32100, 173>>18 beshort 2 SPARC, 174>>18 beshort 3 Intel 80386 - invalid byte order, 175>>18 beshort 4 Motorola 176>>>36 belong &0x01000000 68000, 177>>>36 belong &0x00810000 CPU32, 178>>>36 belong 0 68020, 179>>18 beshort 5 Motorola 88000, 180>>18 beshort 6 Intel 80486 - invalid byte order, 181>>18 beshort 7 Intel 80860, 182# only for MIPS - see comment in little-endian section above. 183>>18 beshort 8 MIPS, 184>>>36 belong &0x20 N32 185>>18 beshort 10 MIPS, 186>>>36 belong &0x20 N32 187>>18 beshort 8 188# only for 32-bit 189>>>4 byte 1 190>>>>36 belong&0xf0000000 0x00000000 MIPS-I 191>>>>36 belong&0xf0000000 0x10000000 MIPS-II 192>>>>36 belong&0xf0000000 0x20000000 MIPS-III 193>>>>36 belong&0xf0000000 0x30000000 MIPS-IV 194>>>>36 belong&0xf0000000 0x40000000 MIPS-V 195>>>>36 belong&0xf0000000 0x50000000 MIPS32 196>>>>36 belong&0xf0000000 0x60000000 MIPS64 197>>>>36 belong&0xf0000000 0x70000000 MIPS32 rel2 198>>>>36 belong&0xf0000000 0x80000000 MIPS64 rel2 199# only for 64-bit 200>>>4 byte 2 201>>>>48 belong&0xf0000000 0x00000000 MIPS-I 202>>>>48 belong&0xf0000000 0x10000000 MIPS-II 203>>>>48 belong&0xf0000000 0x20000000 MIPS-III 204>>>>48 belong&0xf0000000 0x30000000 MIPS-IV 205>>>>48 belong&0xf0000000 0x40000000 MIPS-V 206>>>>48 belong&0xf0000000 0x50000000 MIPS32 207>>>>48 belong&0xf0000000 0x60000000 MIPS64 208>>>>48 belong&0xf0000000 0x70000000 MIPS32 rel2 209>>>>48 belong&0xf0000000 0x80000000 MIPS64 rel2 210>>18 beshort 9 Amdahl, 211>>18 beshort 10 MIPS (deprecated), 212>>18 beshort 11 RS6000, 213>>18 beshort 15 PA-RISC 214>>>50 beshort 0x0214 2.0 215>>>48 beshort &0x0008 (LP64) 216>>18 beshort 16 nCUBE, 217>>18 beshort 17 Fujitsu VPP500, 218>>18 beshort 18 SPARC32PLUS, 219>>>36 belong&0xffff00 0x000100 V8+ Required, 220>>>36 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, 221>>>36 belong&0xffff00 0x000400 HaL R1 Extensions Required, 222>>>36 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, 223>>18 beshort 20 PowerPC or cisco 4500, 224>>18 beshort 21 64-bit PowerPC or cisco 7500, 225>>18 beshort 22 IBM S/390, 226>>18 beshort 23 Cell SPU, 227>>18 beshort 24 cisco SVIP, 228>>18 beshort 25 cisco 7200, 229>>18 beshort 36 NEC V800 or cisco 12000, 230>>18 beshort 37 Fujitsu FR20, 231>>18 beshort 38 TRW RH-32, 232>>18 beshort 39 Motorola RCE, 233>>18 beshort 40 ARM, 234>>18 beshort 41 Alpha, 235>>18 beshort 42 Renesas SH, 236>>18 beshort 43 SPARC V9, 237>>>48 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, 238>>>48 belong&0xffff00 0x000400 HaL R1 Extensions Required, 239>>>48 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, 240>>>48 belong&0x3 0 total store ordering, 241>>>48 belong&0x3 1 partial store ordering, 242>>>48 belong&0x3 2 relaxed memory ordering, 243>>18 beshort 44 Siemens Tricore Embedded Processor, 244>>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc., 245>>18 beshort 46 Renesas H8/300, 246>>18 beshort 47 Renesas H8/300H, 247>>18 beshort 48 Renesas H8S, 248>>18 beshort 49 Renesas H8/500, 249>>18 beshort 50 IA-64, 250>>18 beshort 51 Stanford MIPS-X, 251>>18 beshort 52 Motorola Coldfire, 252>>18 beshort 53 Motorola M68HC12, 253>>18 beshort 73 Cray NV1, 254>>18 beshort 75 Digital VAX, 255>>18 beshort 88 Renesas M32R, 256>>18 leshort 92 OpenRISC, 257>>18 leshort 0x3426 OpenRISC (obsolete), 258>>18 leshort 0x8472 OpenRISC (obsolete), 259>>18 beshort 94 Tensilica Xtensa, 260>>18 beshort 97 NatSemi 32k, 261>>18 beshort 0x18ad AVR32 (unofficial), 262>>18 beshort 0x9026 Alpha (unofficial), 263>>18 beshort 0xa390 IBM S/390 (obsolete), 264>>20 belong 0 invalid version 265>>20 belong 1 version 1 266>>36 belong 1 MathCoPro/FPU/MAU Required 267# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed 268# like proper ELF, but extracting the string had bad results. 269>4 byte <0x80 270>>8 string >\0 (%s) 271>8 string \0 272>>7 byte 0 (SYSV) 273>>7 byte 1 (HP-UX) 274>>7 byte 2 (NetBSD) 275>>7 byte 3 (GNU/Linux) 276>>7 byte 4 (GNU/Hurd) 277>>7 byte 5 (86Open) 278>>7 byte 6 (Solaris) 279>>7 byte 7 (Monterey) 280>>7 byte 8 (IRIX) 281>>7 byte 9 (FreeBSD) 282>>7 byte 10 (Tru64) 283>>7 byte 11 (Novell Modesto) 284>>7 byte 12 (OpenBSD) 285>8 string \2 286>>7 byte 13 (OpenVMS) 287>>7 byte 97 (ARM) 288>>7 byte 255 (embedded) 289