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