168349Sobrien 268349Sobrien#------------------------------------------------------------------------------ 3234449Sobrien# $File: elf,v 1.54 2011/12/17 17:16:29 christos Exp $ 468349Sobrien# elf: file(1) magic for ELF executables 568349Sobrien# 668349Sobrien# We have to check the byte order flag to see what byte order all the 768349Sobrien# other stuff in the header is in. 868349Sobrien# 968349Sobrien# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? 1068349Sobrien# 11186691Sobrien# Created by: unknown 12186691Sobrien# Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com> 13186691Sobrien# Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support) 14186691Sobrien# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support) 15186691Sobrien# Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium) 16186691Sobrien# Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures) 1768349Sobrien0 string \177ELF ELF 1868349Sobrien>4 byte 0 invalid class 1968349Sobrien>4 byte 1 32-bit 2068349Sobrien>4 byte 2 64-bit 2168349Sobrien>5 byte 0 invalid byte order 2268349Sobrien>5 byte 1 LSB 23159764Sobrien>>16 leshort 0 no file type, 24186691Sobrien!:strength *2 25186691Sobrien!:mime application/octet-stream 26159764Sobrien>>16 leshort 1 relocatable, 27186691Sobrien!:mime application/x-object 28159764Sobrien>>16 leshort 2 executable, 29186691Sobrien!:mime application/x-executable 30159764Sobrien>>16 leshort 3 shared object, 31186691Sobrien!:mime application/x-sharedlib 32159764Sobrien>>16 leshort 4 core file 33186691Sobrien!:mime application/x-coredump 34159764Sobrien# Core file detection is not reliable. 35159764Sobrien#>>>(0x38+0xcc) string >\0 of '%s' 36159764Sobrien#>>>(0x38+0x10) lelong >0 (signal %d), 37159764Sobrien>>16 leshort &0xff00 processor-specific, 38159764Sobrien>>18 leshort 0 no machine, 39159764Sobrien>>18 leshort 1 AT&T WE32100 - invalid byte order, 40159764Sobrien>>18 leshort 2 SPARC - invalid byte order, 41159764Sobrien>>18 leshort 3 Intel 80386, 42159764Sobrien>>18 leshort 4 Motorola 43159764Sobrien>>>36 lelong &0x01000000 68000 - invalid byte order, 44159764Sobrien>>>36 lelong &0x00810000 CPU32 - invalid byte order, 45159764Sobrien>>>36 lelong 0 68020 - invalid byte order, 46159764Sobrien>>18 leshort 5 Motorola 88000 - invalid byte order, 47159764Sobrien>>18 leshort 6 Intel 80486, 48159764Sobrien>>18 leshort 7 Intel 80860, 49103373Sobrien# The official e_machine number for MIPS is now #8, regardless of endianness. 50103373Sobrien# The second number (#10) will be deprecated later. For now, we still 51103373Sobrien# say something if #10 is encountered, but only gory details for #8. 52159764Sobrien>>18 leshort 8 MIPS, 53159764Sobrien>>>36 lelong &0x20 N32 54159764Sobrien>>18 leshort 10 MIPS, 55159764Sobrien>>>36 lelong &0x20 N32 56159764Sobrien>>18 leshort 8 5769216Sobrien# only for 32-bit 5869216Sobrien>>>4 byte 1 59103373Sobrien>>>>36 lelong&0xf0000000 0x00000000 MIPS-I 60103373Sobrien>>>>36 lelong&0xf0000000 0x10000000 MIPS-II 61103373Sobrien>>>>36 lelong&0xf0000000 0x20000000 MIPS-III 62103373Sobrien>>>>36 lelong&0xf0000000 0x30000000 MIPS-IV 63103373Sobrien>>>>36 lelong&0xf0000000 0x40000000 MIPS-V 64175296Sobrien>>>>36 lelong&0xf0000000 0x50000000 MIPS32 65175296Sobrien>>>>36 lelong&0xf0000000 0x60000000 MIPS64 66175296Sobrien>>>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2 67175296Sobrien>>>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2 6869216Sobrien# only for 64-bit 6969216Sobrien>>>4 byte 2 70103373Sobrien>>>>48 lelong&0xf0000000 0x00000000 MIPS-I 71103373Sobrien>>>>48 lelong&0xf0000000 0x10000000 MIPS-II 72103373Sobrien>>>>48 lelong&0xf0000000 0x20000000 MIPS-III 73103373Sobrien>>>>48 lelong&0xf0000000 0x30000000 MIPS-IV 74103373Sobrien>>>>48 lelong&0xf0000000 0x40000000 MIPS-V 75175296Sobrien>>>>48 lelong&0xf0000000 0x50000000 MIPS32 76175296Sobrien>>>>48 lelong&0xf0000000 0x60000000 MIPS64 77175296Sobrien>>>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2 78175296Sobrien>>>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2 7968349Sobrien>>18 leshort 9 Amdahl - invalid byte order, 80103373Sobrien>>18 leshort 10 MIPS (deprecated), 8168349Sobrien>>18 leshort 11 RS6000 - invalid byte order, 8268349Sobrien>>18 leshort 15 PA-RISC - invalid byte order, 8374784Sobrien>>>50 leshort 0x0214 2.0 8474784Sobrien>>>48 leshort &0x0008 (LP64), 8568349Sobrien>>18 leshort 16 nCUBE, 8668349Sobrien>>18 leshort 17 Fujitsu VPP500, 87186691Sobrien>>18 leshort 18 SPARC32PLUS - invalid byte order, 8868349Sobrien>>18 leshort 20 PowerPC, 89133359Sobrien>>18 leshort 22 IBM S/390, 9068349Sobrien>>18 leshort 36 NEC V800, 9168349Sobrien>>18 leshort 37 Fujitsu FR20, 9268349Sobrien>>18 leshort 38 TRW RH-32, 9368349Sobrien>>18 leshort 39 Motorola RCE, 9475937Sobrien>>18 leshort 40 ARM, 9568349Sobrien>>18 leshort 41 Alpha, 96133359Sobrien>>18 leshort 0xa390 IBM S/390 (obsolete), 97169942Sobrien>>18 leshort 42 Renesas SH, 9868349Sobrien>>18 leshort 43 SPARC V9 - invalid byte order, 9968349Sobrien>>18 leshort 44 Siemens Tricore Embedded Processor, 10068349Sobrien>>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc., 101169942Sobrien>>18 leshort 46 Renesas H8/300, 102169942Sobrien>>18 leshort 47 Renesas H8/300H, 103169942Sobrien>>18 leshort 48 Renesas H8S, 104169942Sobrien>>18 leshort 49 Renesas H8/500, 105159764Sobrien>>18 leshort 50 IA-64, 10668349Sobrien>>18 leshort 51 Stanford MIPS-X, 10768349Sobrien>>18 leshort 52 Motorola Coldfire, 10868349Sobrien>>18 leshort 53 Motorola M68HC12, 109186691Sobrien>>18 leshort 54 Fujitsu MMA, 110186691Sobrien>>18 leshort 55 Siemens PCP, 111186691Sobrien>>18 leshort 56 Sony nCPU, 112186691Sobrien>>18 leshort 57 Denso NDR1, 113186691Sobrien>>18 leshort 58 Start*Core, 114186691Sobrien>>18 leshort 59 Toyota ME16, 115186691Sobrien>>18 leshort 60 ST100, 116186691Sobrien>>18 leshort 61 Tinyj emb., 117169942Sobrien>>18 leshort 62 x86-64, 118186691Sobrien>>18 leshort 63 Sony DSP, 119186691Sobrien>>18 leshort 66 FX66, 120186691Sobrien>>18 leshort 67 ST9+ 8/16 bit, 121186691Sobrien>>18 leshort 68 ST7 8 bit, 122186691Sobrien>>18 leshort 69 MC68HC16, 123186691Sobrien>>18 leshort 70 MC68HC11, 124186691Sobrien>>18 leshort 71 MC68HC08, 125186691Sobrien>>18 leshort 72 MC68HC05, 126186691Sobrien>>18 leshort 73 SGI SVx, 127186691Sobrien>>18 leshort 74 ST19 8 bit, 12868349Sobrien>>18 leshort 75 Digital VAX, 129186691Sobrien>>18 leshort 76 Axis cris, 130186691Sobrien>>18 leshort 77 Infineon 32-bit embedded, 131186691Sobrien>>18 leshort 78 Element 14 64-bit DSP, 132186691Sobrien>>18 leshort 79 LSI Logic 16-bit DSP, 133186691Sobrien>>18 leshort 80 MMIX, 134186691Sobrien>>18 leshort 81 Harvard machine-independent, 135186691Sobrien>>18 leshort 82 SiTera Prism, 136186691Sobrien>>18 leshort 83 Atmel AVR 8-bit, 137186691Sobrien>>18 leshort 84 Fujitsu FR30, 138186691Sobrien>>18 leshort 85 Mitsubishi D10V, 139186691Sobrien>>18 leshort 86 Mitsubishi D30V, 140186691Sobrien>>18 leshort 87 NEC v850, 141139368Sobrien>>18 leshort 88 Renesas M32R, 142186691Sobrien>>18 leshort 89 Matsushita MN10300, 143186691Sobrien>>18 leshort 90 Matsushita MN10200, 144186691Sobrien>>18 leshort 91 picoJava, 145186691Sobrien>>18 leshort 92 OpenRISC, 146186691Sobrien>>18 leshort 93 ARC Cores Tangent-A5, 147169942Sobrien>>18 leshort 94 Tensilica Xtensa, 148111658Sobrien>>18 leshort 97 NatSemi 32k, 149169962Sobrien>>18 leshort 106 Analog Devices Blackfin, 150191771Sobrien>>18 leshort 113 Altera Nios II, 151191771Sobrien>>18 leshort 0xae META, 152234449Sobrien>>18 leshort 187 Tilera TILE64, 153234449Sobrien>>18 leshort 188 Tilera TILEPro, 154234449Sobrien>>18 leshort 191 Tilera TILE-Gx, 155191771Sobrien>>18 leshort 0x3426 OpenRISC (obsolete), 156191771Sobrien>>18 leshort 0x8472 OpenRISC (obsolete), 15768349Sobrien>>18 leshort 0x9026 Alpha (unofficial), 15868349Sobrien>>20 lelong 0 invalid version 15968349Sobrien>>20 lelong 1 version 1 16068349Sobrien>>36 lelong 1 MathCoPro/FPU/MAU Required 16168349Sobrien>5 byte 2 MSB 162159764Sobrien>>16 beshort 0 no file type, 163186691Sobrien!:mime application/octet-stream 164159764Sobrien>>16 beshort 1 relocatable, 165186691Sobrien!:mime application/x-object 166159764Sobrien>>16 beshort 2 executable, 167186691Sobrien!:mime application/x-executable 168159764Sobrien>>16 beshort 3 shared object, 169186691Sobrien!:mime application/x-sharedlib 170159764Sobrien>>16 beshort 4 core file, 171186691Sobrien!:mime application/x-coredump 172159764Sobrien#>>>(0x38+0xcc) string >\0 of '%s' 173159764Sobrien#>>>(0x38+0x10) belong >0 (signal %d), 174159764Sobrien>>16 beshort &0xff00 processor-specific, 175159764Sobrien>>18 beshort 0 no machine, 176159764Sobrien>>18 beshort 1 AT&T WE32100, 177159764Sobrien>>18 beshort 2 SPARC, 178159764Sobrien>>18 beshort 3 Intel 80386 - invalid byte order, 179159764Sobrien>>18 beshort 4 Motorola 180159764Sobrien>>>36 belong &0x01000000 68000, 181159764Sobrien>>>36 belong &0x00810000 CPU32, 182159764Sobrien>>>36 belong 0 68020, 183159764Sobrien>>18 beshort 5 Motorola 88000, 184159764Sobrien>>18 beshort 6 Intel 80486 - invalid byte order, 185159764Sobrien>>18 beshort 7 Intel 80860, 186103373Sobrien# only for MIPS - see comment in little-endian section above. 187159764Sobrien>>18 beshort 8 MIPS, 188159764Sobrien>>>36 belong &0x20 N32 189159764Sobrien>>18 beshort 10 MIPS, 190159764Sobrien>>>36 belong &0x20 N32 191159764Sobrien>>18 beshort 8 19268349Sobrien# only for 32-bit 19368349Sobrien>>>4 byte 1 194103373Sobrien>>>>36 belong&0xf0000000 0x00000000 MIPS-I 195103373Sobrien>>>>36 belong&0xf0000000 0x10000000 MIPS-II 196103373Sobrien>>>>36 belong&0xf0000000 0x20000000 MIPS-III 197103373Sobrien>>>>36 belong&0xf0000000 0x30000000 MIPS-IV 198103373Sobrien>>>>36 belong&0xf0000000 0x40000000 MIPS-V 199175296Sobrien>>>>36 belong&0xf0000000 0x50000000 MIPS32 200175296Sobrien>>>>36 belong&0xf0000000 0x60000000 MIPS64 201175296Sobrien>>>>36 belong&0xf0000000 0x70000000 MIPS32 rel2 202175296Sobrien>>>>36 belong&0xf0000000 0x80000000 MIPS64 rel2 20368349Sobrien# only for 64-bit 20468349Sobrien>>>4 byte 2 205103373Sobrien>>>>48 belong&0xf0000000 0x00000000 MIPS-I 206103373Sobrien>>>>48 belong&0xf0000000 0x10000000 MIPS-II 207103373Sobrien>>>>48 belong&0xf0000000 0x20000000 MIPS-III 208103373Sobrien>>>>48 belong&0xf0000000 0x30000000 MIPS-IV 209103373Sobrien>>>>48 belong&0xf0000000 0x40000000 MIPS-V 210175296Sobrien>>>>48 belong&0xf0000000 0x50000000 MIPS32 211175296Sobrien>>>>48 belong&0xf0000000 0x60000000 MIPS64 212175296Sobrien>>>>48 belong&0xf0000000 0x70000000 MIPS32 rel2 213175296Sobrien>>>>48 belong&0xf0000000 0x80000000 MIPS64 rel2 21468349Sobrien>>18 beshort 9 Amdahl, 215103373Sobrien>>18 beshort 10 MIPS (deprecated), 21668349Sobrien>>18 beshort 11 RS6000, 21774784Sobrien>>18 beshort 15 PA-RISC 21874784Sobrien>>>50 beshort 0x0214 2.0 21974784Sobrien>>>48 beshort &0x0008 (LP64) 22068349Sobrien>>18 beshort 16 nCUBE, 22168349Sobrien>>18 beshort 17 Fujitsu VPP500, 22268349Sobrien>>18 beshort 18 SPARC32PLUS, 223186691Sobrien>>>36 belong&0xffff00 0x000100 V8+ Required, 224186691Sobrien>>>36 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, 225186691Sobrien>>>36 belong&0xffff00 0x000400 HaL R1 Extensions Required, 226186691Sobrien>>>36 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, 22768349Sobrien>>18 beshort 20 PowerPC or cisco 4500, 228169962Sobrien>>18 beshort 21 64-bit PowerPC or cisco 7500, 229133359Sobrien>>18 beshort 22 IBM S/390, 230169962Sobrien>>18 beshort 23 Cell SPU, 23168349Sobrien>>18 beshort 24 cisco SVIP, 23268349Sobrien>>18 beshort 25 cisco 7200, 23368349Sobrien>>18 beshort 36 NEC V800 or cisco 12000, 23468349Sobrien>>18 beshort 37 Fujitsu FR20, 23568349Sobrien>>18 beshort 38 TRW RH-32, 23668349Sobrien>>18 beshort 39 Motorola RCE, 23775937Sobrien>>18 beshort 40 ARM, 23868349Sobrien>>18 beshort 41 Alpha, 239169942Sobrien>>18 beshort 42 Renesas SH, 24068349Sobrien>>18 beshort 43 SPARC V9, 241186691Sobrien>>>48 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, 242186691Sobrien>>>48 belong&0xffff00 0x000400 HaL R1 Extensions Required, 243186691Sobrien>>>48 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, 244186691Sobrien>>>48 belong&0x3 0 total store ordering, 245186691Sobrien>>>48 belong&0x3 1 partial store ordering, 246186691Sobrien>>>48 belong&0x3 2 relaxed memory ordering, 24768349Sobrien>>18 beshort 44 Siemens Tricore Embedded Processor, 24868349Sobrien>>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc., 249169942Sobrien>>18 beshort 46 Renesas H8/300, 250169942Sobrien>>18 beshort 47 Renesas H8/300H, 251169942Sobrien>>18 beshort 48 Renesas H8S, 252169942Sobrien>>18 beshort 49 Renesas H8/500, 253159764Sobrien>>18 beshort 50 IA-64, 25468349Sobrien>>18 beshort 51 Stanford MIPS-X, 25568349Sobrien>>18 beshort 52 Motorola Coldfire, 25668349Sobrien>>18 beshort 53 Motorola M68HC12, 25780588Sobrien>>18 beshort 73 Cray NV1, 25868349Sobrien>>18 beshort 75 Digital VAX, 259139368Sobrien>>18 beshort 88 Renesas M32R, 260186691Sobrien>>18 leshort 92 OpenRISC, 261186691Sobrien>>18 leshort 0x3426 OpenRISC (obsolete), 262186691Sobrien>>18 leshort 0x8472 OpenRISC (obsolete), 263169942Sobrien>>18 beshort 94 Tensilica Xtensa, 264111658Sobrien>>18 beshort 97 NatSemi 32k, 265234449Sobrien>>18 beshort 187 Tilera TILE64, 266234449Sobrien>>18 beshort 188 Tilera TILEPro, 267234449Sobrien>>18 beshort 191 Tilera TILE-Gx, 268175296Sobrien>>18 beshort 0x18ad AVR32 (unofficial), 26968349Sobrien>>18 beshort 0x9026 Alpha (unofficial), 270133359Sobrien>>18 beshort 0xa390 IBM S/390 (obsolete), 27168349Sobrien>>20 belong 0 invalid version 27268349Sobrien>>20 belong 1 version 1 27368349Sobrien>>36 belong 1 MathCoPro/FPU/MAU Required 274133359Sobrien# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed 275133359Sobrien# like proper ELF, but extracting the string had bad results. 276133359Sobrien>4 byte <0x80 277133359Sobrien>>8 string >\0 (%s) 27880588Sobrien>8 string \0 27980588Sobrien>>7 byte 0 (SYSV) 28080588Sobrien>>7 byte 1 (HP-UX) 28180588Sobrien>>7 byte 2 (NetBSD) 28280588Sobrien>>7 byte 3 (GNU/Linux) 28380588Sobrien>>7 byte 4 (GNU/Hurd) 28480588Sobrien>>7 byte 5 (86Open) 28580588Sobrien>>7 byte 6 (Solaris) 28680588Sobrien>>7 byte 7 (Monterey) 28780588Sobrien>>7 byte 8 (IRIX) 28880588Sobrien>>7 byte 9 (FreeBSD) 28980588Sobrien>>7 byte 10 (Tru64) 29080588Sobrien>>7 byte 11 (Novell Modesto) 29180588Sobrien>>7 byte 12 (OpenBSD) 292169942Sobrien>8 string \2 293169942Sobrien>>7 byte 13 (OpenVMS) 29480588Sobrien>>7 byte 97 (ARM) 29580588Sobrien>>7 byte 255 (embedded) 296