Imported Upstream version 0.4.5
[packages/binwalk.git] / src / magic / magic.executables
1
2 #------------------Standard file formats------------------------------------
3
4 # elf:  file(1) magic for ELF executables
5 #
6 # We have to check the byte order flag to see what byte order all the
7 # other stuff in the header is in.
8 #
9 # What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
10 #
11 # Created by: unknown
12 # Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com>
13 # Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support)
14 # Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support)
15 # Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium)
16 # Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures)
17 0       string          \177ELF         ELF
18 >4      byte            0               invalid class
19 >4      byte            1               32-bit
20 >4      byte            2               64-bit
21 >5      byte            0               invalid byte order
22 >5      byte            1               LSB
23 >>16    leshort         0               no file type,
24 !:strength *2
25 !:mime  application/octet-stream
26 >>16    leshort         1               relocatable,
27 !:mime  application/x-object
28 >>16    leshort         2               executable,
29 !:mime  application/x-executable
30 >>16    leshort         3               shared object,
31 !:mime  application/x-sharedlib
32 >>16    leshort         4               core file
33 !:mime  application/x-coredump
34 # Core file detection is not reliable.
35 #>>>(0x38+0xcc) string  >\0             of '%s'
36 #>>>(0x38+0x10) lelong  >0              (signal %d),
37 >>16    leshort         &0xff00         processor-specific,
38 >>18    leshort         0               no machine,
39 >>18    leshort         1               AT&T WE32100 - invalid byte order,
40 >>18    leshort         2               SPARC - invalid byte order,
41 >>18    leshort         3               Intel 80386,
42 >>18    leshort         4               Motorola
43 >>>36   lelong          &0x01000000     68000 - invalid byte order,
44 >>>36   lelong          &0x00810000     CPU32 - invalid byte order,
45 >>>36   lelong          0               68020 - invalid byte order,
46 >>18    leshort         5               Motorola 88000 - invalid byte order,
47 >>18    leshort         6               Intel 80486,
48 >>18    leshort         7               Intel 80860,
49 # The official e_machine number for MIPS is now #8, regardless of endianness.
50 # The second number (#10) will be deprecated later. For now, we still
51 # say something if #10 is encountered, but only gory details for #8.
52 >>18    leshort         8               MIPS,
53 >>>36   lelong          &0x20           N32
54 >>18    leshort         10              MIPS,
55 >>>36   lelong          &0x20           N32
56 >>18    leshort         8
57 # only for 32-bit
58 >>>4    byte            1
59 >>>>36  lelong&0xf0000000       0x00000000      MIPS-I
60 >>>>36  lelong&0xf0000000       0x10000000      MIPS-II
61 >>>>36  lelong&0xf0000000       0x20000000      MIPS-III
62 >>>>36  lelong&0xf0000000       0x30000000      MIPS-IV
63 >>>>36  lelong&0xf0000000       0x40000000      MIPS-V
64 >>>>36  lelong&0xf0000000       0x50000000      MIPS32
65 >>>>36  lelong&0xf0000000       0x60000000      MIPS64
66 >>>>36  lelong&0xf0000000       0x70000000      MIPS32 rel2
67 >>>>36  lelong&0xf0000000       0x80000000      MIPS64 rel2
68 # only for 64-bit
69 >>>4    byte            2
70 >>>>48  lelong&0xf0000000       0x00000000      MIPS-I
71 >>>>48  lelong&0xf0000000       0x10000000      MIPS-II
72 >>>>48  lelong&0xf0000000       0x20000000      MIPS-III
73 >>>>48  lelong&0xf0000000       0x30000000      MIPS-IV
74 >>>>48  lelong&0xf0000000       0x40000000      MIPS-V
75 >>>>48  lelong&0xf0000000       0x50000000      MIPS32
76 >>>>48  lelong&0xf0000000       0x60000000      MIPS64
77 >>>>48  lelong&0xf0000000       0x70000000      MIPS32 rel2
78 >>>>48  lelong&0xf0000000       0x80000000      MIPS64 rel2
79 >>18    leshort         9               Amdahl - invalid byte order,
80 >>18    leshort         10              MIPS (deprecated),
81 >>18    leshort         11              RS6000 - invalid byte order,
82 >>18    leshort         15              PA-RISC - invalid byte order,
83 >>>50   leshort         0x0214          2.0
84 >>>48   leshort         &0x0008         (LP64),
85 >>18    leshort         16              nCUBE,
86 >>18    leshort         17              Fujitsu VPP500,
87 >>18    leshort         18              SPARC32PLUS - invalid byte order,
88 >>18    leshort         20              PowerPC,
89 >>18    leshort         22              IBM S/390,
90 >>18    leshort         36              NEC V800,
91 >>18    leshort         37              Fujitsu FR20,
92 >>18    leshort         38              TRW RH-32,
93 >>18    leshort         39              Motorola RCE,
94 >>18    leshort         40              ARM,
95 >>18    leshort         41              Alpha,
96 >>18    leshort         0xa390          IBM S/390 (obsolete),
97 >>18    leshort         42              Renesas SH,
98 >>18    leshort         43              SPARC V9 - invalid byte order,
99 >>18    leshort         44              Siemens Tricore Embedded Processor,
100 >>18    leshort         45              Argonaut RISC Core, Argonaut Technologies Inc.,
101 >>18    leshort         46              Renesas H8/300,
102 >>18    leshort         47              Renesas H8/300H,
103 >>18    leshort         48              Renesas H8S,
104 >>18    leshort         49              Renesas H8/500,
105 >>18    leshort         50              IA-64,
106 >>18    leshort         51              Stanford MIPS-X,
107 >>18    leshort         52              Motorola Coldfire,
108 >>18    leshort         53              Motorola M68HC12,
109 >>18    leshort         54              Fujitsu MMA,
110 >>18    leshort         55              Siemens PCP,
111 >>18    leshort         56              Sony nCPU,
112 >>18    leshort         57              Denso NDR1,
113 >>18    leshort         58              Start*Core,
114 >>18    leshort         59              Toyota ME16,
115 >>18    leshort         60              ST100,
116 >>18    leshort         61              Tinyj emb.,
117 >>18    leshort         62              x86-64,
118 >>18    leshort         63              Sony DSP,
119 >>18    leshort         66              FX66,
120 >>18    leshort         67              ST9+ 8/16 bit,
121 >>18    leshort         68              ST7 8 bit,
122 >>18    leshort         69              MC68HC16,
123 >>18    leshort         70              MC68HC11,
124 >>18    leshort         71              MC68HC08,
125 >>18    leshort         72              MC68HC05,
126 >>18    leshort         73              SGI SVx,
127 >>18    leshort         74              ST19 8 bit,
128 >>18    leshort         75              Digital VAX,
129 >>18    leshort         76              Axis cris,
130 >>18    leshort         77              Infineon 32-bit embedded,
131 >>18    leshort         78              Element 14 64-bit DSP,
132 >>18    leshort         79              LSI Logic 16-bit DSP,
133 >>18    leshort         80              MMIX,
134 >>18    leshort         81              Harvard machine-independent,
135 >>18    leshort         82              SiTera Prism,
136 >>18    leshort         83              Atmel AVR 8-bit,
137 >>18    leshort         84              Fujitsu FR30,
138 >>18    leshort         85              Mitsubishi D10V,
139 >>18    leshort         86              Mitsubishi D30V,
140 >>18    leshort         87              NEC v850,
141 >>18    leshort         88              Renesas M32R,
142 >>18    leshort         89              Matsushita MN10300,
143 >>18    leshort         90              Matsushita MN10200,
144 >>18    leshort         91              picoJava,
145 >>18    leshort         92              OpenRISC,
146 >>18    leshort         93              ARC Cores Tangent-A5,
147 >>18    leshort         94              Tensilica Xtensa,
148 >>18    leshort         97              NatSemi 32k,
149 >>18    leshort         106             Analog Devices Blackfin,
150 >>18    leshort         113             Altera Nios II,
151 >>18    leshort         0xae            META,
152 >>18    leshort         0x3426          OpenRISC (obsolete),
153 >>18    leshort         0x8472          OpenRISC (obsolete),
154 >>18    leshort         0x9026          Alpha (unofficial),
155 >>20    lelong          0               invalid version
156 >>20    lelong          1               version 1
157 >>36    lelong          1               MathCoPro/FPU/MAU Required
158 >5      byte            2               MSB
159 >>16    beshort         0               no file type,
160 !:mime  application/octet-stream
161 >>16    beshort         1               relocatable,
162 !:mime  application/x-object
163 >>16    beshort         2               executable,
164 !:mime  application/x-executable
165 >>16    beshort         3               shared object,
166 !:mime  application/x-sharedlib
167 >>16    beshort         4               core file,
168 !:mime  application/x-coredump
169 #>>>(0x38+0xcc) string  >\0             of '%s'
170 #>>>(0x38+0x10) belong  >0              (signal %d),
171 >>16    beshort         &0xff00         processor-specific,
172 >>18    beshort         0               no machine,
173 >>18    beshort         1               AT&T WE32100,
174 >>18    beshort         2               SPARC,
175 >>18    beshort         3               Intel 80386 - invalid byte order,
176 >>18    beshort         4               Motorola
177 >>>36   belong          &0x01000000     68000,
178 >>>36   belong          &0x00810000     CPU32,
179 >>>36   belong          0               68020,
180 >>18    beshort         5               Motorola 88000,
181 >>18    beshort         6               Intel 80486 - invalid byte order,
182 >>18    beshort         7               Intel 80860,
183 # only for MIPS - see comment in little-endian section above.
184 >>18    beshort         8               MIPS,
185 >>>36   belong          &0x20           N32
186 >>18    beshort         10              MIPS,
187 >>>36   belong          &0x20           N32
188 >>18    beshort         8
189 # only for 32-bit
190 >>>4    byte            1
191 >>>>36  belong&0xf0000000       0x00000000      MIPS-I
192 >>>>36  belong&0xf0000000       0x10000000      MIPS-II
193 >>>>36  belong&0xf0000000       0x20000000      MIPS-III
194 >>>>36  belong&0xf0000000       0x30000000      MIPS-IV
195 >>>>36  belong&0xf0000000       0x40000000      MIPS-V
196 >>>>36  belong&0xf0000000       0x50000000      MIPS32
197 >>>>36  belong&0xf0000000       0x60000000      MIPS64
198 >>>>36  belong&0xf0000000       0x70000000      MIPS32 rel2
199 >>>>36  belong&0xf0000000       0x80000000      MIPS64 rel2
200 # only for 64-bit
201 >>>4    byte            2
202 >>>>48  belong&0xf0000000       0x00000000      MIPS-I
203 >>>>48  belong&0xf0000000       0x10000000      MIPS-II
204 >>>>48  belong&0xf0000000       0x20000000      MIPS-III
205 >>>>48  belong&0xf0000000       0x30000000      MIPS-IV
206 >>>>48  belong&0xf0000000       0x40000000      MIPS-V
207 >>>>48  belong&0xf0000000       0x50000000      MIPS32
208 >>>>48  belong&0xf0000000       0x60000000      MIPS64
209 >>>>48  belong&0xf0000000       0x70000000      MIPS32 rel2
210 >>>>48  belong&0xf0000000       0x80000000      MIPS64 rel2
211 >>18    beshort         9               Amdahl,
212 >>18    beshort         10              MIPS (deprecated),
213 >>18    beshort         11              RS6000,
214 >>18    beshort         15              PA-RISC
215 >>>50   beshort         0x0214          2.0
216 >>>48   beshort         &0x0008         (LP64)
217 >>18    beshort         16              nCUBE,
218 >>18    beshort         17              Fujitsu VPP500,
219 >>18    beshort         18              SPARC32PLUS,
220 >>>36   belong&0xffff00 0x000100        V8+ Required,
221 >>>36   belong&0xffff00 0x000200        Sun UltraSPARC1 Extensions Required,
222 >>>36   belong&0xffff00 0x000400        HaL R1 Extensions Required,
223 >>>36   belong&0xffff00 0x000800        Sun UltraSPARC3 Extensions Required,
224 >>18    beshort         20              PowerPC or cisco 4500,
225 >>18    beshort         21              64-bit PowerPC or cisco 7500,
226 >>18    beshort         22              IBM S/390,
227 >>18    beshort         23              Cell SPU,
228 >>18    beshort         24              cisco SVIP,
229 >>18    beshort         25              cisco 7200,
230 >>18    beshort         36              NEC V800 or cisco 12000,
231 >>18    beshort         37              Fujitsu FR20,
232 >>18    beshort         38              TRW RH-32,
233 >>18    beshort         39              Motorola RCE,
234 >>18    beshort         40              ARM,
235 >>18    beshort         41              Alpha,
236 >>18    beshort         42              Renesas SH,
237 >>18    beshort         43              SPARC V9,
238 >>>48   belong&0xffff00 0x000200        Sun UltraSPARC1 Extensions Required,
239 >>>48   belong&0xffff00 0x000400        HaL R1 Extensions Required,
240 >>>48   belong&0xffff00 0x000800        Sun UltraSPARC3 Extensions Required,
241 >>>48   belong&0x3      0               total store ordering,
242 >>>48   belong&0x3      1               partial store ordering,
243 >>>48   belong&0x3      2               relaxed memory ordering,
244 >>18    beshort         44              Siemens Tricore Embedded Processor,
245 >>18    beshort         45              Argonaut RISC Core, Argonaut Technologies Inc.,
246 >>18    beshort         46              Renesas H8/300,
247 >>18    beshort         47              Renesas H8/300H,
248 >>18    beshort         48              Renesas H8S,
249 >>18    beshort         49              Renesas H8/500,
250 >>18    beshort         50              IA-64,
251 >>18    beshort         51              Stanford MIPS-X,
252 >>18    beshort         52              Motorola Coldfire,
253 >>18    beshort         53              Motorola M68HC12,
254 >>18    beshort         73              Cray NV1,
255 >>18    beshort         75              Digital VAX,
256 >>18    beshort         88              Renesas M32R,
257 >>18    leshort         92              OpenRISC,
258 >>18    leshort         0x3426          OpenRISC (obsolete),
259 >>18    leshort         0x8472          OpenRISC (obsolete),
260 >>18    beshort         94              Tensilica Xtensa,
261 >>18    beshort         97              NatSemi 32k,
262 >>18    beshort         0x18ad          AVR32 (unofficial),
263 >>18    beshort         0x9026          Alpha (unofficial),
264 >>18    beshort         0xa390          IBM S/390 (obsolete),
265 >>20    belong          0               invalid version
266 >>20    belong          1               version 1
267 >>36    belong          1               MathCoPro/FPU/MAU Required
268 # Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
269 # like proper ELF, but extracting the string had bad results.
270 >4      byte            <0x80
271 >>8     string          >\0             (%s)
272 >8      string          \0
273 >>7     byte            0               (SYSV)
274 >>7     byte            1               (HP-UX)
275 >>7     byte            2               (NetBSD)
276 >>7     byte            3               (GNU/Linux)
277 >>7     byte            4               (GNU/Hurd)
278 >>7     byte            5               (86Open)
279 >>7     byte            6               (Solaris)
280 >>7     byte            7               (Monterey)
281 >>7     byte            8               (IRIX)
282 >>7     byte            9               (FreeBSD)
283 >>7     byte            10              (Tru64)
284 >>7     byte            11              (Novell Modesto)
285 >>7     byte            12              (OpenBSD)
286 >8      string          \2
287 >>7     byte            13              (OpenVMS)
288 >>7     byte            97              (ARM)
289 >>7     byte            255             (embedded)
290
291
292
293 # XXX - according to Microsoft's spec, at an offset of 0x3c in a
294 # PE-format executable is the offset in the file of the PE header;
295 # unfortunately, that's a little-endian offset, and there's no way
296 # to specify an indirect offset with a specified byte order.
297 # So, for now, we assume the standard MS-DOS stub, which puts the
298 # PE header at 0x80 = 128.
299 #
300 # Required OS version and subsystem version were 4.0 on some NT 3.51
301 # executables built with Visual C++ 4.0, so it's not clear that
302 # they're interesting.  The user version was 0.0, but there's
303 # probably some linker directive to set it.  The linker version was
304 # 3.0, except for one ".exe" which had it as 4.20 (same damn linker!).
305 #
306 # many of the compressed formats were extraced from IDARC 1.23 source code
307 #
308 0       string  MZ
309 !:mime  application/x-dosexec
310 >0x18  leshort <0x40 MS-DOS executable
311 >0 string MZ\0\0\0\0\0\0\0\0\0\0PE\0\0 \b, PE for MS Windows
312 >>&18   leshort&0x2000  >0      (DLL)
313 >>&88   leshort         0       (unknown subsystem)
314 >>&88   leshort         1       (native)
315 >>&88   leshort         2       (GUI)
316 >>&88   leshort         3       (console)
317 >>&88   leshort         7       (POSIX)
318 >>&0    leshort         0x0     unknown processor
319 >>&0    leshort         0x14c   Intel 80386
320 >>&0    leshort         0x166   MIPS R4000
321 >>&0    leshort         0x184   Alpha
322 >>&0    leshort         0x268   Motorola 68000
323 >>&0    leshort         0x1f0   PowerPC
324 >>&0    leshort         0x290   PA-RISC
325 >>&18   leshort&0x0100  >0      32-bit
326 >>&18   leshort&0x1000  >0      system file
327 >>&228  lelong          >0      \b, Mono/.Net assembly
328 >>&0xf4 search/0x140 \x0\x40\x1\x0
329 >>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
330 >30             string  Copyright\x201989-1990\x20PKWARE\x20Inc.      Self-extracting PKZIP archive
331 !:mime  application/zip
332 # Is next line correct? One might expect "Corp." not "Copr." If it is right, add a note to that effect.
333 >30             string  PKLITE\x20Copr.   Self-extracting PKZIP archive
334 !:mime  application/zip
335
336 >0x18  leshort >0x3f
337 >>(0x3c.l) string PE\0\0 PE
338 >>>(0x3c.l+25) byte             1 \b32 executable
339 >>>(0x3c.l+25) byte             2 \b32+ executable
340 # hooray, there's a DOS extender using the PE format, with a valid PE
341 # executable inside (which just prints a message and exits if run in win)
342 >>>(0x3c.l+92)  leshort         <10
343 >>>>(8.s*16) string 32STUB for MS-DOS, 32rtm DOS extender
344 >>>>(8.s*16) string !32STUB for MS Windows
345 >>>>>(0x3c.l+22)        leshort&0x2000  >0      (DLL)
346 >>>>>(0x3c.l+92)        leshort         0       (unknown subsystem)
347 >>>>>(0x3c.l+92)        leshort         1       (native)
348 >>>>>(0x3c.l+92)        leshort         2       (GUI)
349 >>>>>(0x3c.l+92)        leshort         3       (console)
350 >>>>>(0x3c.l+92)        leshort         7       (POSIX)
351 >>>(0x3c.l+92)  leshort         10      (EFI application)
352 >>>(0x3c.l+92)  leshort         11      (EFI boot service driver)
353 >>>(0x3c.l+92)  leshort         12      (EFI runtime driver)
354 >>>(0x3c.l+92)  leshort         13      (XBOX)
355 >>>(0x3c.l+4)   leshort         0x0     unknown processor
356 >>>(0x3c.l+4)   leshort         0x14c   Intel 80386
357 >>>(0x3c.l+4)   leshort         0x166   MIPS R4000
358 >>>(0x3c.l+4)   leshort         0x184   Alpha
359 >>>(0x3c.l+4)   leshort         0x268   Motorola 68000
360 >>>(0x3c.l+4)   leshort         0x1f0   PowerPC
361 >>>(0x3c.l+4)   leshort         0x290   PA-RISC
362 >>>(0x3c.l+4)   leshort         0x200   Intel Itanium
363 >>>(0x3c.l+22)  leshort&0x0100  >0      32-bit
364 >>>(0x3c.l+22)  leshort&0x1000  >0      system file
365 >>>(0x3c.l+232) lelong  >0      Mono/.Net assembly
366 >>>>(0x3c.l+0xf8)       string          UPX0 \b, UPX compressed
367 >>>>(0x3c.l+0xf8)       search/0x140    PEC2 \b, PECompact2 compressed
368 >>>>(0x3c.l+0xf8)       search/0x140    UPX2
369 >>>>>(&0x10.l+(-4))     string          PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
370 >>>>(0x3c.l+0xf8)       search/0x140    .idata
371 >>>>>(&0xe.l+(-4))      string          PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
372 >>>>>(&0xe.l+(-4))      string          ZZ0 \b, ZZip self-extracting archive
373 >>>>>(&0xe.l+(-4))      string          ZZ1 \b, ZZip self-extracting archive
374 >>>>(0x3c.l+0xf8)       search/0x140    .rsrc
375 >>>>>(&0x0f.l+(-4))     string          a\\\4\5 \b, WinHKI self-extracting archive
376 >>>>>(&0x0f.l+(-4))     string          Rar! \b, RAR self-extracting archive
377 >>>>>(&0x0f.l+(-4))     search/0x3000   MSCF \b, InstallShield self-extracting archive
378 >>>>>(&0x0f.l+(-4))     search/32       Nullsoft \b, Nullsoft Installer self-extracting archive
379 >>>>(0x3c.l+0xf8)       search/0x140    .data
380 >>>>>(&0x0f.l)          string          WEXTRACT \b, MS CAB-Installer self-extracting archive
381 >>>>(0x3c.l+0xf8)       search/0x140    .petite\0 \b, Petite compressed
382 >>>>>(0x3c.l+0xf7)      byte            x
383 >>>>>>(&0x104.l+(-4))   string          =!sfx! \b, ACE self-extracting archive
384 >>>>(0x3c.l+0xf8)       search/0x140    .WISE \b, WISE installer self-extracting archive
385 >>>>(0x3c.l+0xf8)       search/0x140    .dz\0\0\0 \b, Dzip self-extracting archive
386 >>>>(0x3c.l+0xf8)       search/0x140    .reloc
387 >>>>>(&0xe.l+(-4))      search/0x180    PK\3\4 \b, ZIP self-extracting archive (WinZip)
388
389 >>>>&(0x3c.l+0xf8)      search/0x100    _winzip_ \b, ZIP self-extracting archive (WinZip)
390 >>>>&(0x3c.l+0xf8)      search/0x100    SharedD \b, Microsoft Installer self-extracting archive
391 >>>>0x30                string          Inno \b, InnoSetup self-extracting archive
392
393 >>(0x3c.l) string !PE\0\0 MS-DOS executable
394
395 >>(0x3c.l)              string          NE \b, NE
396 >>>(0x3c.l+0x36)        byte            0 (unknown OS)
397 >>>(0x3c.l+0x36)        byte            1 for OS/2 1.x
398 >>>(0x3c.l+0x36)        byte            2 for MS Windows 3.x
399 >>>(0x3c.l+0x36)        byte            3 for MS-DOS
400 >>>(0x3c.l+0x36)        byte            >3 (unknown OS)
401 >>>(0x3c.l+0x36)        byte            0x81 for MS-DOS, Phar Lap DOS extender
402 >>>(0x3c.l+0x0c)        leshort&0x8003  0x8002 (DLL)
403 >>>(0x3c.l+0x0c)        leshort&0x8003  0x8001 (driver)
404 >>>&(&0x24.s-1)         string          ARJSFX \b, ARJ self-extracting archive
405 >>>(0x3c.l+0x70)        search/0x80     WinZip(R)\x20Self-Extractor \b, ZIP self-extracting archive (WinZip)
406
407 >>(0x3c.l)              string          LX\0\0 \b, LX
408 >>>(0x3c.l+0x0a)        leshort         <1 (unknown OS)
409 >>>(0x3c.l+0x0a)        leshort         1 for OS/2
410 >>>(0x3c.l+0x0a)        leshort         2 for MS Windows
411 >>>(0x3c.l+0x0a)        leshort         3 for DOS
412 >>>(0x3c.l+0x0a)        leshort         >3 (unknown OS)
413 >>>(0x3c.l+0x10)        lelong&0x28000  =0x8000 (DLL)
414 >>>(0x3c.l+0x10)        lelong&0x20000  >0 (device driver)
415 >>>(0x3c.l+0x10)        lelong&0x300    0x300 (GUI)
416 >>>(0x3c.l+0x10)        lelong&0x28300  <0x300 (console)
417 >>>(0x3c.l+0x08)        leshort         1 i80286
418 >>>(0x3c.l+0x08)        leshort         2 i80386
419 >>>(0x3c.l+0x08)        leshort         3 i80486
420 >>>(8.s*16)             string          emx \b, emx
421 >>>>&1                  string          x %s
422 >>>&(&0x54.l-3)         string          arjsfx \b, ARJ self-extracting archive
423
424
425
426 #------------------------------------------------------------------------------
427 # bFLT: file(1) magic for BFLT uclinux binary files
428 #
429 # From Philippe De Muyter <phdm@macqel.be>
430
431 # Additional fields added by Craig Heffner
432 #
433 0       string          bFLT            BFLT executable 
434 >4      belong          x               version %ld, 
435 >4      belong          4
436 >8      belong          x               code offset: 0x%.8X, 
437 >12     belong          x               data segment starts at: 0x%.8X, 
438 >16     belong          x               bss segment starts at: 0x%.8X, 
439 >20     belong          x               bss segment ends at: 0x%.8X, 
440 >24     belong          x               stack size: %d bytes, 
441 >28     belong          x               relocation records start at: 0x%.8X, 
442 >32     belong          x               number of reolcation records: %d, 
443 >>36    belong&0x1      0x1             ram
444 >>36    belong&0x2      0x2             gotpic
445 >>36    belong&0x4      0x4             gzip
446 >>36    belong&0x8      0x8             gzdata
447
448
449 #-----------------------------------------------------------------
450 # MIPS COFF file formats
451 #
452 0       beshort 0x0160          MIPSEB ECOFF executable
453 >20     beshort 0407            (impure)
454 >20     beshort 0410            (swapped)
455 >20     beshort 0413            (paged)
456 >8      belong  >0              not stripped
457 >8      belong  0               stripped
458 >22     byte    x               - version %ld
459 >23     byte    x               ^H.%ld
460 #
461 0       beshort 0x0162          MIPSEL-BE ECOFF executable
462 >20     beshort 0407            (impure)
463 >20     beshort 0410            (swapped)
464 >20     beshort 0413            (paged)
465 >8      belong  >0              not stripped
466 >8      belong  0               stripped
467 >23     byte    x               - version %d
468 >22     byte    x               ^H.%ld
469 #
470 0       beshort 0x6001          MIPSEB-LE ECOFF executable
471 >20     beshort 03401           (impure)
472 >20     beshort 04001           (swapped)
473 >20     beshort 05401           (paged)
474 >8      belong  >0              not stripped
475 >8      belong  0               stripped
476 >23     byte    x               - version %d
477 >22     byte    x               ^H.%ld
478 #
479 0       beshort 0x6201          MIPSEL ECOFF executable
480 >20     beshort 03401           (impure)
481 >20     beshort 04001           (swapped)
482 >20     beshort 05401           (paged)
483 >8      belong  >0              not stripped
484 >8      belong  0               stripped
485 >23     byte    x               - version %ld
486 >22     byte    x               ^H.%ld
487 # MIPS 2 additions
488 #
489 0       beshort 0x0163          MIPSEB MIPS-II ECOFF executable
490 >20     beshort 0407            (impure)
491 >20     beshort 0410            (swapped)
492 >20     beshort 0413            (paged)
493 >8      belong  >0              not stripped
494 >8      belong  0               stripped
495 >22     byte    x               - version %ld
496 >23     byte    x               ^H.%ld
497 #
498 0       beshort 0x0166          MIPSEL-BE MIPS-II ECOFF executable
499 >20     beshort 0407            (impure)
500 >20     beshort 0410            (swapped)
501 >20     beshort 0413            (paged)
502 >8      belong  >0              not stripped
503 >8      belong  0               stripped
504 >22     byte    x               - version %ld
505 >23     byte    x               ^H.%ld
506 #
507 0       beshort 0x6301          MIPSEB-LE MIPS-II ECOFF executable
508 >20     beshort 03401           (impure)
509 >20     beshort 04001           (swapped)
510 >20     beshort 05401           (paged)
511 >8      belong  >0              not stripped
512 >8      belong  0               stripped
513 >23     byte    x               - version %ld
514 >22     byte    x               ^H.%ld
515 #
516 0       beshort 0x6601          MIPSEL MIPS-II ECOFF executable
517 >20     beshort 03401           (impure)
518 >20     beshort 04001           (swapped)
519 >20     beshort 05401           (paged)
520 >8      belong  >0              not stripped
521 >8      belong  0               stripped
522 >23     byte    x               - version %ld
523 >22     byte    x               ^H.%ld
524 # MIPS 3 additions
525 #
526 0       beshort 0x0140          MIPSEB MIPS-III ECOFF executable
527 >20     beshort 0407            (impure)
528 >20     beshort 0410            (swapped)
529 >20     beshort 0413            (paged)
530 >8      belong  >0              not stripped
531 >8      belong  0               stripped
532 >22     byte    x               - version %ld
533 >23     byte    x               ^H.%ld
534 #
535 0       beshort 0x0142          MIPSEL-BE MIPS-III ECOFF executable
536 >20     beshort 0407            (impure)
537 >20     beshort 0410            (swapped)
538 >20     beshort 0413            (paged)
539 >8      belong  >0              not stripped
540 >8      belong  0               stripped
541 >22     byte    x               - version %ld
542 >23     byte    x               ^H.%ld
543 #
544 0       beshort 0x4001          MIPSEB-LE MIPS-III ECOFF executable
545 >20     beshort 03401           (impure)
546 >20     beshort 04001           (swapped)
547 >20     beshort 05401           (paged)
548 >8      belong  >0              not stripped
549 >8      belong  0               stripped
550 >23     byte    x               - version %ld
551 >22     byte    x               ^H.%ld
552 #
553 0       beshort 0x4201          MIPSEL MIPS-III ECOFF executable
554 >20     beshort 03401           (impure)
555 >20     beshort 04001           (swapped)
556 >20     beshort 05401           (paged)
557 >8      belong  >0              not stripped
558 >8      belong  0               stripped
559 >23     byte    x               - version %ld
560 >22     byte    x               ^H.%ld
561 #
562 0       beshort 0x180           MIPSEB Ucode
563 0       beshort 0x182           MIPSEL-BE Ucode
564
565
566 # Windows CE package files
567 0       string          MSCE\0\0\0\0    Microsoft WinCE installer
568 >20     lelong          0               \b, architecture-independent
569 >20     lelong          103             \b, Hitachi SH3
570 >20     lelong          104             \b, Hitachi SH4
571 >20     lelong          0xA11           \b, StrongARM
572 >20     lelong          4000            \b, MIPS R4000
573 >20     lelong          10003           \b, Hitachi SH3
574 >20     lelong          10004           \b, Hitachi SH3E
575 >20     lelong          10005           \b, Hitachi SH4
576 >20     lelong          70001           \b, ARM 7TDMI
577 >52     leshort         1               \b, 1 file
578 >52     leshort         >1              \b, %u files
579 >56     leshort         1               \b, 1 registry entry
580 >56     leshort         >1              \b, %u registry entries
581
582 #------------------------------------------------------------------------------
583 # Microsoft Xbox executables .xbe (Esa Hyytiä <ehyytia@cc.hut.fi>)
584 0       string          XBEH            XBE, Microsoft Xbox executable
585 # probabilistic checks whether signed or not
586 >0x0004 ulelong =0x0
587 >>&2    ulelong =0x0
588 >>>&2   ulelong =0x0  \b, not signed
589 >0x0004 ulelong >0
590 >>&2    ulelong >0
591 >>>&2   ulelong >0    \b, signed
592 # expect base address of 0x10000
593 >0x0104               ulelong =0x10000
594 >>(0x0118-0x0FF60)    ulelong&0x80000007  0x80000007 \b, all regions
595 >>(0x0118-0x0FF60)    ulelong&0x80000007  !0x80000007
596 >>>(0x0118-0x0FF60)   ulelong >0           (regions:
597 >>>>(0x0118-0x0FF60)  ulelong &0x00000001  NA
598 >>>>(0x0118-0x0FF60)  ulelong &0x00000002  Japan
599 >>>>(0x0118-0x0FF60)  ulelong &0x00000004  Rest_of_World
600 >>>>(0x0118-0x0FF60)  ulelong &0x80000000  Manufacturer
601 >>>(0x0118-0x0FF60)   ulelong >0           \b)
602
603 #------------------------------------------------------------------------------
604 # motorola:  file(1) magic for Motorola 68K and 88K binaries
605 #
606 # 68K
607 #
608 0       beshort         0x0208          mc68k COFF
609 >18     beshort         ^00000020       object
610 >18     beshort         &00000020       executable
611 >12     belong          >0              not stripped
612 >168    string          .lowmem         Apple toolbox
613 >20     beshort         0407            (impure)
614 >20     beshort         0410            (pure)
615 >20     beshort         0413            (demand paged)
616 >20     beshort         0421            (standalone)
617 0       beshort         0x0209          mc68k executable (shared)
618 >12     belong          >0              not stripped
619 0       beshort         0x020A          mc68k executable (shared demand paged)
620 >12     belong          >0              not stripped
621
622
623 #
624 # Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
625 #
626 0       beshort         0x022A            68K BCS executable
627 #
628 # 88K
629 #
630 # Motorola/88Open BCS
631 #
632 0       beshort         0x022B            88K BCS executable
633
634 #------------------------------------------------------------------------------
635 # Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :
636 0       string  PS-X\x20EXE       Sony Playstation executable
637 #  Area:
638 >113    string  x               (%s)
639
640 #------------------------------------------------------------------------------
641 # cisco:  file(1) magic for cisco Systems routers
642 #
643 # Most cisco file-formats are covered by the generic elf code
644 #
645 # Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
646 0       beshort                 0x8501      cisco IOS
647 >0      belong&0xffffff00       0x85011400  microcode
648 >0      belong&0xffffff00       0x8501cb00  experimental microcode
649 >7      string                  >\0         for '%s'
650
651
652