1#------------------------------------------------------------------------------
2# $File: filesystems,v 1.158 2023/05/21 17:19:08 christos Exp $
3# filesystems:  file(1) magic for different filesystems
4#
50         name      partid
6>0        ubyte     0x00      Unused
7>0        ubyte     0x01      12-bit FAT
8>0        ubyte     0x02      XENIX /
9>0        ubyte     0x03      XENIX /usr
10>0        ubyte     0x04      16-bit FAT, less than 32M
11>0        ubyte     0x05      extended partition
12>0        ubyte     0x06      16-bit FAT, more than 32M
13>0        ubyte     0x07      OS/2 HPFS, NTFS, QNX2, Adv. UNIX
14>0        ubyte     0x08      AIX or os, or etc.
15>0        ubyte     0x09      AIX boot partition or Coherent
16>0        ubyte     0x0a      O/2 boot manager or Coherent swap
17>0        ubyte     0x0b      32-bit FAT
18>0        ubyte     0x0c      32-bit FAT, LBA-mapped
19>0        ubyte     0x0d      7XXX, LBA-mapped
20>0        ubyte     0x0e      16-bit FAT, LBA-mapped
21>0        ubyte     0x0f      extended partition, LBA-mapped
22>0        ubyte     0x10      OPUS
23>0        ubyte     0x11      OS/2 DOS 12-bit FAT
24>0        ubyte     0x12      Compaq diagnostics
25>0        ubyte     0x14      OS/2 DOS 16-bit FAT <32M
26>0        ubyte     0x16      OS/2 DOS 16-bit FAT >=32M
27>0        ubyte     0x17      OS/2 hidden IFS
28>0        ubyte     0x18      AST Windows swapfile
29>0        ubyte     0x19      Willowtech Photon coS
30>0        ubyte     0x1b      hidden win95 fat 32
31>0        ubyte     0x1c      hidden win95 fat 32 lba
32>0        ubyte     0x1d      hidden win95 fat 16 lba
33>0        ubyte     0x20      Willowsoft OFS1
34>0        ubyte     0x21      reserved
35>0        ubyte     0x23      reserved
36>0        ubyte     0x24      NEC DOS
37>0        ubyte     0x26      reserved
38>0        ubyte     0x31      reserved
39>0        ubyte     0x32      Alien Internet Services NOS
40>0        ubyte     0x33      reserved
41>0        ubyte     0x34      reserved
42>0        ubyte     0x35      JFS on OS2
43>0        ubyte     0x36      reserved
44>0        ubyte     0x38      Theos
45>0        ubyte     0x39      Plan 9, or Theos spanned
46>0        ubyte     0x3a      Theos ver 4 4gb partition
47>0        ubyte     0x3b      Theos ve 4 extended partition
48>0        ubyte     0x3c      PartitionMagic recovery
49>0        ubyte     0x3d      Hidden Netware
50>0        ubyte     0x40      VENIX 286 or LynxOS
51>0        ubyte     0x41      PReP
52>0        ubyte     0x42      linux swap sharing DRDOS disk
53>0        ubyte     0x43      linux sharing DRDOS disk
54>0        ubyte     0x44      GoBack change utility
55>0        ubyte     0x45      Boot US Boot manager
56>0        ubyte     0x46      EUMEL/Elan or Ergos 3
57>0        ubyte     0x47      EUMEL/Elan or Ergos 3
58>0        ubyte     0x48      EUMEL/Elan or Ergos 3
59>0        ubyte     0x4a      ALFX/THIN filesystem for DOS
60>0        ubyte     0x4c      Oberon partition
61>0        ubyte     0x4d      QNX4.x
62>0        ubyte     0x4e      QNX4.x 2nd part
63>0        ubyte     0x4f      QNX4.x 3rd part
64>0        ubyte     0x50      DM (disk manager)
65>0        ubyte     0x51      DM6 Aux1 (or Novell)
66>0        ubyte     0x52      CP/M or Microport SysV/AT
67>0        ubyte     0x53      DM6 Aux3
68>0        ubyte     0x54      DM6 DDO
69>0        ubyte     0x55      EZ-Drive (disk manager)
70>0        ubyte     0x56      Golden Bow (disk manager)
71>0        ubyte     0x57      Drive PRO
72>0        ubyte     0x5c      Priam Edisk (disk manager)
73>0        ubyte     0x61      SpeedStor
74>0        ubyte     0x63      GNU HURD or Mach or Sys V/386
75>0        ubyte     0x64      Novell Netware 2.xx or Speedstore
76>0        ubyte     0x65      Novell Netware 3.xx
77>0        ubyte     0x66      Novell 386 Netware
78>0        ubyte     0x67      Novell
79>0        ubyte     0x68      Novell
80>0        ubyte     0x69      Novell
81>0        ubyte     0x70      DiskSecure Multi-Boot
82>0        ubyte     0x71      reserved
83>0        ubyte     0x73      reserved
84>0        ubyte     0x74      reserved
85>0        ubyte     0x75      PC/IX
86>0        ubyte     0x76      reserved
87>0        ubyte     0x77      M2FS/M2CS partition
88>0        ubyte     0x78      XOSL boot loader filesystem
89>0        ubyte     0x80      MINIX until 1.4a
90>0        ubyte     0x81      MINIX since 1.4b
91>0        ubyte     0x82      Linux swap or Solaris
92>0        ubyte     0x83      Linux native
93>0        ubyte     0x84      OS/2 hidden C: drive
94>0        ubyte     0x85      Linux extended partition
95>0        ubyte     0x86      NT FAT volume set
96>0        ubyte     0x87      NTFS volume set or HPFS mirrored
97>0        ubyte     0x8a      Linux Kernel AiR-BOOT partition
98>0        ubyte     0x8b      Legacy Fault tolerant FAT32
99>0        ubyte     0x8c      Legacy Fault tolerant FAT32 ext
100>0        ubyte     0x8d      Hidden free FDISK FAT12
101>0        ubyte     0x8e      Linux Logical Volume Manager
102>0        ubyte     0x90      Hidden free FDISK FAT16
103>0        ubyte     0x91      Hidden free FDISK DOS EXT
104>0        ubyte     0x92      Hidden free FDISK FAT16 Big
105>0        ubyte     0x93      Amoeba filesystem
106>0        ubyte     0x94      Amoeba bad block table
107>0        ubyte     0x95      MIT EXOPC native partitions
108>0        ubyte     0x97      Hidden free FDISK FAT32
109>0        ubyte     0x98      Datalight ROM-DOS Super-Boot
110>0        ubyte     0x99      Mylex EISA SCSI
111>0        ubyte     0x9a      Hidden free FDISK FAT16 LBA
112>0        ubyte     0x9b      Hidden free FDISK EXT LBA
113>0        ubyte     0x9f      BSDI?
114>0        ubyte     0xa0      IBM Thinkpad hibernation
115>0        ubyte     0xa1      HP Volume expansion (SpeedStor)
116>0        ubyte     0xa3      HP Volume expansion (SpeedStor)
117>0        ubyte     0xa4      HP Volume expansion (SpeedStor)
118>0        ubyte     0xa5      386BSD partition type
119>0        ubyte     0xa6      OpenBSD partition type
120>0        ubyte     0xa7      NeXTSTEP 486
121>0        ubyte     0xa8      Apple UFS
122>0        ubyte     0xa9      NetBSD partition type
123>0        ubyte     0xaa      Olivetty Fat12 1.44MB Service part
124>0        ubyte     0xab      Apple Boot
125>0        ubyte     0xae      SHAG OS filesystem
126>0        ubyte     0xaf      Apple HFS
127>0        ubyte     0xb0      BootStar Dummy
128>0        ubyte     0xb1      reserved
129>0        ubyte     0xb3      reserved
130>0        ubyte     0xb4      reserved
131>0        ubyte     0xb6      reserved
132>0        ubyte     0xb7      BSDI BSD/386 filesystem
133>0        ubyte     0xb8      BSDI BSD/386 swap
134>0        ubyte     0xbb      Boot Wizard Hidden
135>0        ubyte     0xbe      Solaris 8 partition type
136>0        ubyte     0xbf      Solaris partition type
137>0        ubyte     0xc0      CTOS
138>0        ubyte     0xc1      DRDOS/sec (FAT-12)
139>0        ubyte     0xc2      Hidden Linux
140>0        ubyte     0xc3      Hidden Linux swap
141>0        ubyte     0xc4      DRDOS/sec (FAT-16, < 32M)
142>0        ubyte     0xc5      DRDOS/sec (EXT)
143>0        ubyte     0xc6      DRDOS/sec (FAT-16, >= 32M)
144>0        ubyte     0xc7      Syrinx (Cyrnix?) or HPFS disabled
145>0        ubyte     0xc8      Reserved for DR-DOS 8.0+
146>0        ubyte     0xc9      Reserved for DR-DOS 8.0+
147>0        ubyte     0xca      Reserved for DR-DOS 8.0+
148>0        ubyte     0xcb      DR-DOS 7.04+ Secured FAT32 CHS
149>0        ubyte     0xcc      DR-DOS 7.04+ Secured FAT32 LBA
150>0        ubyte     0xcd      CTOS Memdump
151>0        ubyte     0xce      DR-DOS 7.04+ FAT16X LBA
152>0        ubyte     0xcf      DR-DOS 7.04+ EXT LBA
153>0        ubyte     0xd0      REAL/32 secure big partition
154>0        ubyte     0xd1      Old Multiuser DOS FAT12
155>0        ubyte     0xd4      Old Multiuser DOS FAT16 Small
156>0        ubyte     0xd5      Old Multiuser DOS Extended
157>0        ubyte     0xd6      Old Multiuser DOS FAT16 Big
158>0        ubyte     0xd8      CP/M 86
159>0        ubyte     0xdb      CP/M or Concurrent CP/M
160>0        ubyte     0xdd      Hidden CTOS Memdump
161>0        ubyte     0xde      Dell PowerEdge Server utilities
162>0        ubyte     0xdf      DG/UX virtual disk manager
163>0        ubyte     0xe0      STMicroelectronics ST AVFS
164>0        ubyte     0xe1      DOS access or SpeedStor 12-bit
165>0        ubyte     0xe3      DOS R/O or Storage Dimensions
166>0        ubyte     0xe4      SpeedStor 16-bit FAT < 1024 cyl.
167>0        ubyte     0xe5      reserved
168>0        ubyte     0xe6      reserved
169>0        ubyte     0xeb      BeOS
170>0        ubyte     0xee      GPT Protective MBR
171>0        ubyte     0xef      EFI system partition
172>0        ubyte     0xf0      Linux PA-RISC boot loader
173>0        ubyte     0xf1      SpeedStor or Storage Dimensions
174>0        ubyte     0xf2      DOS 3.3+ Secondary
175>0        ubyte     0xf3      reserved
176>0        ubyte     0xf4      SpeedStor large partition
177>0        ubyte     0xf5      Prologue multi-volumen partition
178>0        ubyte     0xf6      reserved
179>0        ubyte     0xf9      pCache: ext2/ext3 persistent cache
180>0        ubyte     0xfa      Bochs x86 emulator
181>0        ubyte     0xfb      VMware File System
182>0        ubyte     0xfc      VMware Swap
183>0        ubyte     0xfd      Linux RAID partition persistent sb
184>0        ubyte     0xfe      LANstep or IBM PS/2 IML
185>0        ubyte     0xff      Xenix Bad Block Table
186
1870         string    \366\366\366\366    PC formatted floppy with no filesystem
188# Sun disk labels
189# From /usr/include/sun/dklabel.h:
1900774      beshort             0xdabe
191# modified by Joerg Jenderek, because original test
192# succeeds for Cabinet archive dao360.dl_ with negative blocks
193>0770     long                >0                  Sun disk label
194>>0       string              x                   '%s
195>>>31     string              >\0                 \b%s
196>>>>63    string              >\0                 \b%s
197>>>>>95   string              >\0                 \b%s
198>>0       string              x                   \b'
199>>0734    short               >0                  %d rpm,
200>>0736    short               >0                  %d phys cys,
201>>0740    short               >0                  %d alts/cyl,
202>>0746    short               >0                  %d interleave,
203>>0750    short               >0                  %d data cyls,
204>>0752    short               >0                  %d alt cyls,
205>>0754    short               >0                  %d heads/partition,
206>>0756    short               >0                  %d sectors/track,
207>>0764    long                >0                  start cyl %d,
208>>0770    long                x                   %d blocks
209# Is there a boot block written 1 sector in?
210>512    belong&077777777      0600407   \b, boot block present
211
212# Joerg Jenderek: Smart Boot Manager backup file is 25 (MSDOS) or 41 (LINUX) byte header + first sectors of disk
213# (http://btmgr.sourceforge.net/docs/user-guide-3.html)
2140                   string    SBMBAKUP_ Smart Boot Manager backup file
215>9                  string    x                   \b, version %-5.5s
216>>14                string    =_
217>>>15               string    x                   %-.1s
218>>>>16              string    =_                  \b.
219>>>>>17             string    x                   \b%-.1s
220>>>>>>18  string    =_                  \b.
221>>>>>>>19 string    x                   \b%-.1s
222>>>22               ubyte     0
223>>>>21              ubyte     x                   \b, from drive %#x
224>>>22               ubyte     >0
225>>>>21              string    x                   \b, from drive %s
226>>>535              search/17 \x55\xAA
227>>>>&-512 indirect  x         \b; contains
228
229# updated by Joerg Jenderek at Nov 2012
230# DOS Emulator image is 128 byte, null right padded header + harddisc image
2310         string    DOSEMU\0
232>0x27E    leshort   0xAA55
233#offset is 128
234>>19      ubyte     128
235>>>(19.b-1)         ubyte     0x0       DOS Emulator image
236>>>>7     ulelong   >0                  \b, %u heads
237>>>>11    ulelong   >0                  \b, %d sectors/track
238>>>>15    ulelong   >0                  \b, %d cylinders
239>>>>128   indirect  x         \b; contains
240
241# added by Joerg Jenderek at Nov 2012
242# http://www.thenakedpc.com/articles/v04/08/0408-05.html
243# Symantec (Peter Norton) Image.dat file consists of variable header, bootrecord, part of FAT and root directory data
2440         string    PNCIHISK\0                    Norton Utilities disc image data
245# real x86 boot sector with jump instruction
246>509      search/1026         \x55\xAA\xeb
247>>&-1     indirect  x                   \b; contains
248# http://file-extension.net/seeker/file_extension_dat
2490         string    PNCIUNDO            Norton Disk Doctor UnDo file
250#
251
252# DOS/MBR boot sector updated by Joerg Jenderek at Sep 2007,May 2011,2013
253# for any allowed sector sizes
25430                  search/481          \x55\xAA
255# to display DOS/MBR boot sector (40) before old one (strength=50+21),Syslinux bootloader (71),SYSLINUX MBR (37+36),NetBSD mbr (110),AdvanceMAME mbr (111)
256# DOS BPB information (70) and after DOS floppy (120) like in previous file version
257!:strength +65
258# for sector sizes < 512 Bytes
259>11                 uleshort  <512
260>>(11.s-2)          uleshort  0xAA55              DOS/MBR boot sector
261# for sector sizes with 512 or more Bytes
262>0x1FE              leshort             0xAA55              DOS/MBR boot sector
263
264# ExFAT
2653                   string/w  =EXFAT
266>0x1FE              leshort             0xAA55
267>>0x6E              ubyte               1
268>>>0x6F             ubyte               0x80
269>>>0                ubyte               0xEB      DOS/MBR boot sector,
270>>>0x69             ubyte               x         ExFAT Filesystem version %d.
271>>>0x68             ubyte               x         \b%d
272>>>0x6d             ubyte               x         \b, (1<<%d) sectors per cluster
273>>>0x48             ulequad             x         \b, sectors %lld
274>>>0x64             ulelong             x         \b, serial number %#x
275
276# keep old DOS/MBR boot sector as dummy for mbr and bootloader displaying
277# only for sector sizes with 512 or more Bytes
2780x1FE          leshort         0xAA55             DOS/MBR boot sector
279#
280# to display information (50) before DOS BPB (strength=70) and after DOS floppy (120) like in old file version
281!:strength +65
282>2                  string              OSBS                OS/BS MBR
283# added by Joerg Jenderek at Feb 2013 according to https://thestarman.pcministry.com/asm/mbr/
284# and https://en.wikipedia.org/wiki/Master_Boot_Record
285# test for nearly all MS-DOS Master Boot Record initial program loader (IPL) is now done by
286# characteristic assembler instructions: xor ax,ax;mov ss,ax;mov sp,7c00
287>0        search/2  \x33\xc0\x8e\xd0\xbc\x00\x7c  MS-MBR
288# Microsoft Windows 95A and early ( https://thestarman.pcministry.com/asm/mbr/STDMBR.htm )
289# assembler instructions: mov si,sp;push ax;pop es;push ax;pop ds;sti;cld
290>>8       ubequad             0x8bf45007501ffbfc
291# https://thestarman.pcministry.com/asm/mbr/200MBR.htm
292>>>0x16   ubyte               0xF3                                    \b,DOS 2
293>>>>219   regex               Author\ -\                              Author:
294# found "David Litton" , "A Pehrsson  "
295>>>>>&0   string              x                                       "%s"
296>>>0x16   ubyte               0xF2
297# NEC MS-DOS 3.30 Rev. 3 . See https://thestarman.pcministry.com/asm/mbr/DOS33MBR.htm
298# assembler instructions: mov di,077c;cmp word ptrl[di],a55a;jnz
299>>>>0x22  ubequad   0xbf7c07813d5aa575            \b,NEC 3.3
300# version MS-DOS 3.30 til MS-Windows 95A (WinVer=4.00.1111)
301>>>>0x22  default   x                                       \b,D0S version 3.3-7.0
302# error messages are printed by assembler instructions: mov si,06nn;...;int 10 (0xBEnn06;...)
303# where nn is string offset varying for different languages
304# "Invalid partition table"                                 nn=0x8b for english version
305>>>>>(0x49.b)       string              Invalid\ partition\ table               english
306>>>>>(0x49.b)       string              Ung\201ltige\ Partitionstabelle                   german
307>>>>>(0x49.b)       string              Table\ de\ partition\ invalide                    french
308>>>>>(0x49.b)       string              Tabela\ de\ parti\207ao\ inv\240lida    portuguese
309>>>>>(0x49.b)       string              Tabla\ de\ partici\242n\ no\ v\240lida  spanish
310>>>>>(0x49.b)       string              Tavola\ delle\ partizioni\ non\ valida  italian
311>>>>>0x49 ubyte               >0                            at offset %#x
312>>>>>>(0x49.b)      string              >\0                           "%s"
313# "Error loading operating system"                          nn=0xa3 for english version
314# "Fehler beim Laden des Betriebssystems"                   nn=0xa7 for german version
315# "Erreur en chargeant syst\212me d'exploitation" nn=0xa7 for french version
316# "Erro na inicializa\207ao do sistema operacional"         nn=0xa7 for portuguese Brazilian version
317# "Error al cargar sistema operativo"                       nn=0xa8 for spanish version
318# "Errore durante il caricamento del sistema operativo"     nn=0xae for italian version
319>>>>>0x74 ubyte               >0                            at offset %#x
320>>>>>>(0x74.b)      string              >\0                           "%s"
321# "Missing operating system"                                nn=0xc2 for english version
322# "Betriebssystem fehlt"                                    nn=0xcd for german version
323# "Syst\212me d'exploitation absent"                        nn=0xd2 for french version
324# "Sistema operacional nao encontrado"                      nn=0xd4 for portuguese Brazilian version
325# "Falta sistema operativo"                                 nn=0xca for spanish version
326# "Sistema operativo mancante"                                        nn=0xe2 for italian version
327>>>>>0x79 ubyte               >0                            at offset %#x
328>>>>>>(0x79.b)      string              >\0                           "%s"
329# Microsoft Windows 95B to XP (https://thestarman.pcministry.com/asm/mbr/95BMEMBR.htm)
330# assembler instructions: push ax;pop es;push  ax;pop ds;cld;mov si,7c1b
331>>8       ubequad             0x5007501ffcbe1b7c
332# assembler instructions: rep;movsb;retf;mov si,07be;mov cl,04
333>>>24               ubequad   0xf3a4cbbebe07b104            9M
334# "Invalid partition table"                                 nn=0x10F for english version
335# "Ung\201ltige Partitionstabelle"                                    nn=0x10F for german version
336# "Table de partition erron\202e"                                     nn=0x10F for french version
337# "\216\257\245\340\240\346\250\256\255\255\240\357 \341\250\341\342\245\254\240 \255\245 \255\240\251\244\245\255\240" nn=0x10F for russian version
338>>>>(0x3C.b+0x0FF)  string    Invalid\ partition\ table               english
339>>>>(0x3C.b+0x0FF)  string    Ung\201ltige\ Partitionstabelle                   german
340>>>>(0x3C.b+0x0FF)  string    Table\ de\ partition\ erron\202e        french
341>>>>(0x3C.b+0x0FF)  string    \215\245\257\340\240\242\250\253\354\255\240\357\ \342\240\241\253\250\346\240  russian
342>>>>0x3C            ubyte     x                             at offset %#x+0xFF
343>>>>(0x3C.b+0x0FF)  string    >\0                           "%s"
344# "Error loading operating system"                          nn=0x127 for english version
345# "Fehler beim Laden des Betriebssystems"                   nn=0x12b for german version
346# "Erreur lors du chargement du syst\212me d'exploitation"  nn=0x12a for french version
347# "\216\350\250\241\252\240 \257\340\250 \247\240\243\340\343\247\252\245 \256\257\245\340\240\346\250\256\255\255\256\251 \341\250\341\342\245\254\353"        nn=0x12d for russian version
348>>>>0xBD            ubyte     x                             at offset 0x1%x
349>>>>(0xBD.b+0x100)  string    >\0                           "%s"
350# "Missing operating system"                                nn=0x146 for english version
351# "Betriebssystem fehlt"                                    nn=0x151 for german version
352# "Syst\212me d'exploitation manquant"                      nn=0x15e for french version
353# "\216\257\245\340\240\346\250\256\255\255\240\357 \341\250\341\342\245\254\240 \255\245 \255\240\251\244\245\255\240" nn=0x156 for russian version
354>>>>0xA9            ubyte     x                             at offset 0x1%x
355>>>>(0xA9.b+0x100)  string    >\0                           "%s"
356# https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm
357# assembler instructions: rep;movsb;retf;mov BP,07be;mov cl,04
358>>>24               ubequad   0xf3a4cbbdbe07b104            XP
359# where xxyyzz are lower bits from offsets of error messages varying for different languages
360>>>>0x1B4 ubelong&0x00FFFFFF  0x002c4463          english
361>>>>0x1B4 ubelong&0x00FFFFFF  0x002c486e          german
362# "Invalid partition table"                                 xx=0x12C for english version
363# "Ung\201ltige Partitionstabelle"                                    xx=0x12C for german version
364>>>>0x1b5 ubyte               >0                            at offset 0x1%x
365>>>>(0x1b5.b+0x100) string    >\0                           "%s"
366# "Error loading operating system"                          yy=0x144 for english version
367# "Fehler beim Laden des Betriebssystems"                   yy=0x148 for german version
368>>>>0x1b6 ubyte               >0                            at offset 0x1%x
369>>>>(0x1b6.b+0x100) string    >\0                           "%s"
370# "Missing operating system"                                zz=0x163 for english version
371# "Betriebssystem nicht vorhanden"                          zz=0x16e for german version
372>>>>0x1b7 ubyte               >0                            at offset 0x1%x
373>>>>(0x1b7.b+0x100) string    >\0                           "%s"
374# Microsoft Windows Vista or 7
375# assembler instructions: ..;mov ds,ax;mov si,7c00;mov di,..00
376>>8       ubequad             0xc08ed8be007cbf00
377# Microsoft Windows Vista (https://thestarman.pcministry.com/asm/mbr/VistaMBR.htm)
378# assembler instructions: jnz 0729;cmp ebx,"TCPA"
379>>>0xEC             ubequad   0x753b6681fb544350            Vista
380# where xxyyzz are lower bits from offsets of error messages varying for different languages
381>>>>0x1B4 ubelong&0x00FFFFFF  0x00627a99          english
382#>>>>0x1B4          ubelong&0x00FFFFFF  ?                   german
383# "Invalid partition table"                                 xx=0x162 for english version
384# "Ung\201ltige Partitionstabelle"                                    xx=0x1?? for german version
385>>>>0x1b5 ubyte               >0                            at offset 0x1%x
386>>>>(0x1b5.b+0x100) string    >\0                           "%s"
387# "Error loading operating system"                          yy=0x17a for english version
388# "Fehler beim Laden des Betriebssystems"                   yy= 0x1?? for german version
389>>>>0x1b6 ubyte               >0                            at offset 0x1%x
390>>>>(0x1b6.b+0x100) string    >\0                           "%s"
391# "Missing operating system"                                zz=0x199 for english version
392# "Betriebssystem nicht vorhanden"                          zz=0x1?? for german version
393>>>>0x1b7 ubyte               >0                            at offset 0x1%x
394>>>>(0x1b7.b+0x100) string    >\0                           "%s"
395# Microsoft Windows 7 (https://thestarman.pcministry.com/asm/mbr/W7MBR.htm)
396# assembler instructions: cmp ebx,"TCPA";cmp
397>>>0xEC             ubequad   0x6681fb5443504175            Windows 7
398# where xxyyzz are lower bits from offsets of error messages varying for different languages
399>>>>0x1B4 ubelong&0x00FFFFFF  0x00637b9a          english
400#>>>>0x1B4          ubelong&0x00FFFFFF  ?                   german
401# "Invalid partition table"                                 xx=0x163 for english version
402# "Ung\201ltige Partitionstabelle"                                    xx=0x1?? for german version
403>>>>0x1b5 ubyte               >0                            at offset 0x1%x
404>>>>(0x1b5.b+0x100) string    >\0                           "%s"
405# "Error loading operating system"                          yy=0x17b for english version
406# "Fehler beim Laden des Betriebssystems"                   yy=0x1?? for german version
407>>>>0x1b6 ubyte               >0                            at offset 0x1%x
408>>>>(0x1b6.b+0x100) string    >\0                           "%s"
409# "Missing operating system"                                zz=0x19a for english version
410# "Betriebssystem nicht vorhanden"                          zz=0x1?? for german version
411>>>>0x1b7 ubyte               >0                            at offset 0x1%x
412>>>>(0x1b7.b+0x100) string    >\0                           "%s"
413# https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DiskSigs
414# https://en.wikipedia.org/wiki/MBR_disk_signature#ID
415>>0x1b8   ulelong             >0                                      \b, disk signature %#-.4x
416# driveID/timestamp for Win 95B,98,98SE and ME. See https://thestarman.pcministry.com/asm/mbr/mystery.htm
417>>0xDA    uleshort            0
418>>>0xDC   ulelong             >0                            \b, created
419# physical drive number (0x80-0xFF) when the Windows wrote that byte to the drive
420>>>>0xDC  ubyte               x                             with driveID %#x
421# hours, minutes and seconds
422>>>>0xDf  ubyte               x                             at %x
423>>>>0xDe  ubyte               x                             \b:%x
424>>>>0xDd  ubyte               x                             \b:%x
425# special case for Microsoft MS-DOS 3.21 spanish
426# assembler instructions: cli;mov $0x30,%ax;mov %ax,%ss;mov
427>0        ubequad             0xfab830008ed0bc00
428# assembler instructions: $0x1f00,%sp;mov $0x80cb,%di;add %cl,(%bx,%si);in (%dx),%ax;mov
429>>8       ubequad             0x1fbfcb800008ed8             MS-MBR,D0S version 3.21 spanish
430# Microsoft MBR IPL end
431
432# dr-dos with some upper-, lowercase variants
433>0x9D     string    Invalid\ partition\ table$
434>>181     string    No\ Operating\ System$
435>>>201    string    Operating\ System\ load\ error$         \b, DR-DOS MBR, Version 7.01 to 7.03
436>0x9D     string    Invalid\ partition\ table$
437>>181     string    No\ operating\ system$
438>>>201    string    Operating\ system\ load\ error$         \b, DR-DOS MBR, Version 7.01 to 7.03
439>342      string    Invalid\ partition\ table$
440>>366     string    No\ operating\ system$
441>>>386    string    Operating\ system\ load\ error$         \b, DR-DOS MBR, version 7.01 to 7.03
442>295      string    NEWLDR\0
443>>302     string    Bad\ PT\ $
444>>>310    string    No\ OS\ $
445>>>>317   string    OS\ load\ err$
446>>>>>329  string    Moved\ or\ missing\ IBMBIO.LDR\n\r
447>>>>>>358 string    Press\ any\ key\ to\ continue.\n\r$
448>>>>>>>387          string    Copyright\ (c)\ 1984,1998
449>>>>>>>>411         string    Caldera\ Inc.\0               \b, DR-DOS MBR (IBMBIO.LDR)
450#
451# tests for different MS-DOS Master Boot Records (MBR) moved and merged
452#
453#>0x145   string    Default:\ F                                       \b, FREE-DOS MBR
454#>0x14B   string    Default:\ F                                       \b, FREE-DOS 1.0 MBR
455>0x145    search/7  Default:\ F                             \b, FREE-DOS MBR
456#>>313              string    F0\ .\ .\ .
457#>>>322             string    disk\ 1
458#>>>>382  string    FAT3
459>64       string    no\ active\ partition\ found
460>>96      string    read\ error\ while\ reading\ drive      \b, FREE-DOS Beta 0.9 MBR
461# Ranish Partition Manager http://www.ranish.com/part/
462>387      search/4  \0\ Error!\r
463>>378     search/7  Virus!
464>>>397    search/4  Booting\040
465>>>>408   search/4  HD1/\0                                  \b, Ranish MBR (
466>>>>>416  string    Writing\ changes...           \b2.37
467>>>>>>438 ubyte               x                             \b,%#x dots
468>>>>>>440 ubyte               >0                            \b,virus check
469>>>>>>441 ubyte               >0                            \b,partition %c
470#2.38,2.42,2.44
471>>>>>416  string    !Writing\ changes...                    \b
472>>>>>>418 ubyte     1                                       \bvirus check,
473>>>>>>419 ubyte     x                                       \b%#x seconds
474>>>>>>420 ubyte&0x0F          >0                            \b,partition
475>>>>>>>420          ubyte&0x0F          <5                            \b %x
476>>>>>>>420          ubyte&0x0F          0Xf                           \b ask
477>>>>>420  ubyte               x                             \b)
478#
479# SYSLINUX MBR moved
480# https://www.acronis.de/
481>362      string    MBR\ Error\ \0\r
482>>376     string    ress\ any\ key\ to\040
483>>>392    string    boot\ from\ floppy...\0                           \b, Acronis MBR
484# added by Joerg Jenderek
485# https://www.visopsys.org/
486# https://partitionlogic.org.uk/
487>309      string    No\ bootable\ partition\ found\r
488>>339     string    I/O\ Error\ reading\ boot\ sector\r     \b, Visopsys MBR
489>349      string    No\ bootable\ partition\ found\r
490>>379     string    I/O\ Error\ reading\ boot\ sector\r     \b, simple Visopsys MBR
491# bootloader, bootmanager
492>0x40     string    SBML
493# label with 11 characters of FAT 12 bit filesystem
494>>43      string    SMART\ BTMGR
495>>>430    string    SBMK\ Bad!\r                            \b, Smart Boot Manager
496# OEM-ID not always "SBM"
497#>>>>3    strings   SBM
498>>>>6     string    >\0                             \b, version %s
499>382      string    XOSLLOADXCF                             \b, eXtended Operating System Loader
500>6        string    LILO                                    \b, LInux i386 boot LOader
501>>120     string    LILO                                    \b, version 22.3.4 SuSe
502>>172     string    LILO                                    \b, version 22.5.8 Debian
503# updated by Joerg Jenderek at Oct 2008
504# variables according to grub-0.97/stage1/stage1.S or
505# https://www.gnu.org/software/grub/manual/grub.html#Embedded-data
506# usual values are marked with comments to get only information of strange GRUB loaders
507>342                search/60 \0Geom\0
508#>0                 ulelong             x                   %x=0x009048EB ,     0x2a9048EB  0
509>>0x41              ubyte               <2
510>>>0x3E             ubyte               >2                  \b; GRand Unified Bootloader
511# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90
512>>>>0x3E  ubyte               x                   \b, stage1 version %#x
513#If it is 0xFF, use a drive passed by BIOS
514>>>>0x40  ubyte               <0xFF               \b, boot drive %#x
515# in most case 0,1,0x2e for GRUB 0.5.95
516>>>>0x41  ubyte               >0                  \b, LBA flag %#x
517>>>>0x42  uleshort  <0x8000             \b, stage2 address %#x
518#>>>>0x42 uleshort  =0x8000             \b, stage2 address %#x (usual)
519>>>>0x42  uleshort  >0x8000             \b, stage2 address %#x
520#>>>>0x44 ulelong             =1                  \b, 1st sector stage2 %#x (default)
521>>>>0x44  ulelong             >1                  \b, 1st sector stage2 %#x
522>>>>0x48  uleshort  <0x800              \b, stage2 segment %#x
523#>>>>0x48 uleshort  =0x800              \b, stage2 segment %#x (usual)
524>>>>0x48  uleshort  >0x800              \b, stage2 segment %#x
525>>>>402             string    Geom\0Hard\ Disk\0Read\0\ Error\0
526>>>>>394  string    stage1                        \b, GRUB version 0.5.95
527>>>>382             string    Geom\0Hard\ Disk\0Read\0\ Error\0
528>>>>>376  string    GRUB\ \0            \b, GRUB version 0.93 or 1.94
529>>>>383             string    Geom\0Hard\ Disk\0Read\0\ Error\0
530>>>>>377  string    GRUB\ \0            \b, GRUB version 0.94
531>>>>385             string    Geom\0Hard\ Disk\0Read\0\ Error\0
532>>>>>379  string    GRUB\ \0            \b, GRUB version 0.95 or 0.96
533>>>>391             string    Geom\0Hard\ Disk\0Read\0\ Error\0
534>>>>>385  string    GRUB\ \0            \b, GRUB version 0.97
535# unknown version
536>>>343              string    Geom\0Read\0\ Error\0
537>>>>321             string    Loading\ stage1.5   \b, GRUB version x.y
538>>>380              string    Geom\0Hard\ Disk\0Read\0\ Error\0
539>>>>374             string    GRUB\ \0            \b, GRUB version n.m
540# SYSLINUX bootloader moved
541>395      string    chksum\0\ ERROR!\0            \b, Gujin bootloader
542# http://www.bcdwb.de/bcdw/index_e.htm
543>3        string    BCDL
544>>498     string    BCDL\ \ \ \ BIN                         \b, Bootable CD Loader (1.50Z)
545# mbr partition table entries updated by Joerg Jenderek at Sep 2013
546# skip Norton Utilities disc image data
547>3                  string              !IHISK
548# skip Linux style boot sector starting with assembler instructions mov 0x7c0,ax;
549>>0                 belong              !0xb8c0078e
550# not Linux kernel
551>>>514              string              !HdrS
552# not BeOS
553>>>>422             string              !Be\ Boot\ Loader
554# jump over BPB instruction implies DOS bootsector or AdvanceMAME mbr
555>>>>>0              ubelong&0xFD000000  =0xE9000000
556# AdvanceMAME mbr
557>>>>>>(1.b+2)       ubequad             0xfa31c08ed88ec08e
558>>>>>>>446          use                 partition-table
559# mbr, Norton Utilities disc image data, or 2nd,etc. sector of x86 bootloader
560>>>>>0              ubelong&0xFD000000  !0xE9000000
561# skip FSInfosector
562>>>>>>0             string              !RRaA
563# skip 3rd sector of MS x86 bootloader with assembler instructions cli;MOVZX EAX,BYTE PTR [BP+10];MOV ECX,
564# https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm
565>>>>>>>0  ubequad             !0xfa660fb64610668b
566# skip 13rd sector of MS x86 bootloader
567>>>>>>>>0 ubequad             !0x660fb64610668b4e
568# skip sector starting with DOS new line
569>>>>>>>>>0          string              !\r\n
570# allowed active flag 0,80h-FFh
571>>>>>>>>>>446       ubyte               0
572>>>>>>>>>>>446      use                 partition-table
573>>>>>>>>>>446       ubyte               >0x7F
574>>>>>>>>>>>446      use                 partition-table
575# TODO: test for extended bootrecord (ebr) moved and merged with mbr partition table entries
576# mbr partition table entries end
577# https://www.acronis.de/
578#FAT label=ACRONIS\ SZ
579#OEM-ID=BOOTWIZ0
580>442      string    Non-system\ disk,\040
581>>459     string    press\ any\ key...\x7\0                 \b, Acronis Startup Recovery Loader
582# updated by Joerg Jenderek at Nov 2012, Sep 2013
583# DOS names like F11.SYS or BOOTWIZ.SYS are 8 right space padded bytes+3 bytes
584# display 1 space
585>>>447    ubyte     x                   \b
586>>>477    use       DOS-filename
587#
588>185      string    FDBOOT\ Version\040
589>>204     string    \rNo\ Systemdisk.\040
590>>>220    string    Booting\ from\ harddisk.\n\r
591>>>245    string    Cannot\ load\ from\ harddisk.\n\r
592>>>>273 string      Insert\ Systemdisk\040
593>>>>>291 string and\ press\ any\ key.\n\r                   \b, FDBOOT harddisk Bootloader
594>>>>>>200 string    >\0                             \b, version %-3s
595>242      string    Bootsector\ from\ C.H.\ Hochst\204
596# http://freecode.com/projects/dosfstools         dosfstools-n.m/src/mkdosfs.c
597# updated by Joerg Jenderek at Nov 2012. Use search directive with offset instead of string
598# skip name "C.H. Hochstaetter" partly because it is sometimes written without umlaut
599>242      search/127          Bootsector\ from\ C.H.\ Hochst
600>>278     search/127          No\ Systemdisk.\ Booting\ from\ harddisk
601# followed by variants with point,CR-NL or NL-CR
602>>>208    search/261          Cannot\ load\ from\ harddisk.
603# followed by variants CR-NL or NL-CR
604>>>>236   search/235          Insert\ Systemdisk\ and\ press\ any\ key.
605# followed by variants with point,CR-NL or NL-CR
606>>>>>180  search/96 Disk\ formatted\ with\ WinImage\        \b, WinImage harddisk Bootloader
607# followed by string like "6.50 (c) 1993-2004 Gilles Vollant"
608>>>>>>&0  string              x                                                 \b, version %-4.4s
609>(1.b+2)  ubyte               0xe
610>>(1.b+3) ubyte               0x1f
611>>>(1.b+4)          ubyte               0xbe
612# message offset found at (1.b+5) is 0x77 for FAT32 or 0x5b for others
613>>>>(1.b+5)         ubyte&0xd3          0x53
614>>>>>(1.b+6)        ubyte               0x7c
615# assembler instructions: lodsb;and al,al;jz 0xb;push si;mov ah,
616>>>>>>(1.b+7)       ubyte               0xac
617>>>>>>>(1.b+8)      ubyte               0x22
618>>>>>>>>(1.b+9)     ubyte               0xc0
619>>>>>>>>>(1.b+10)   ubyte     0x74
620>>>>>>>>>>(1.b+11)  ubyte     0x0b
621>>>>>>>>>>>(1.b+12) ubyte     0x56
622>>>>>>>>>>>>(1.b+13)          ubyte     0xb4                          \b, mkdosfs boot message display
623# FAT1X version
624>>>>>>>>>>>>>(1.b+5)          ubyte     0x5b
625>>>>>>>>>>>>>>0x5b  string    >\0                           "%-s"
626# FAT32 version
627>>>>>>>>>>>>>(1.b+5)          ubyte     0x77
628>>>>>>>>>>>>>>0x77  string    >\0                           "%-s"
629>214      string    Please\ try\ to\ install\ FreeDOS\      \b, DOS Emulator boot message display
630#>>244    string    from\ dosemu-freedos-*-bin.tgz\r
631#>>>170   string    Sorry,\ could\ not\ load\ an\040
632#>>>>195  string    operating\ system.\r\n
633#
634>103      string    This\ is\ not\ a\ bootable\ disk.\040
635>>132     string    Please\ insert\ a\ bootable\040
636>>>157    string    floppy\ and\r\n
637>>>>169   string    press\ any\ key\ to\ try\ again...\r    \b, FREE-DOS message display
638#
639>66       string    Solaris\ Boot\ Sector
640>>99      string    Incomplete\ MDBoot\ load.
641>>>89     string    Version                                 \b, Sun Solaris Bootloader
642>>>>97    byte      x                                                 version %c
643#
644>408      string    OS/2\ !!\ SYS01475\r\0
645>>429     string    OS/2\ !!\ SYS02025\r\0
646>>>450    string    OS/2\ !!\ SYS02027\r\0
647>>>469    string    OS2BOOT\ \ \ \                                    \b, IBM OS/2 Warp bootloader
648#
649>409      string    OS/2\ !!\ SYS01475\r\0
650>>430     string    OS/2\ !!\ SYS02025\r\0
651>>>451    string    OS/2\ !!\ SYS02027\r\0
652>>>470    string    OS2BOOT\ \ \ \                                    \b, IBM OS/2 Warp Bootloader
653>112                string    This\ disk\ is\ not\ bootable\r
654>>142               string    If\ you\ wish\ to\ make\ it\ bootable
655>>>176              string    run\ the\ DOS\ program\ SYS\040
656>>>200              string    after\ the\r
657>>>>216             string    system\ has\ been\ loaded\r\n
658>>>>>242  string    Please\ insert\ a\ DOS\ diskette\040
659>>>>>271  string    into\r\n\ the\ drive\ and\040
660>>>>>>292 string    strike\ any\ key...\0                   \b, IBM OS/2 Warp message display
661# XP
662>430      string    NTLDR\ is\ missing\xFF\r\n
663>>449     string    Disk\ error\xFF\r\n
664>>>462    string    Press\ any\ key\ to\ restart\r                    \b, Microsoft Windows XP Bootloader
665# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes
666>>>>417             ubyte&0xDF          >0
667>>>>>417  string              x                             %-.5s
668>>>>>>422 ubyte&0xDF          >0
669>>>>>>>422          string              x                             \b%-.3s
670>>>>>425  ubyte&0xDF          >0
671>>>>>>425 string              >\                            \b.%-.3s
672#
673>>>>371             ubyte               >0x20
674>>>>>368  ubyte&0xDF          >0
675>>>>>>368 string              x                             %-.5s
676>>>>>>>373          ubyte&0xDF          >0
677>>>>>>>>373         string              x                             \b%-.3s
678>>>>>>376 ubyte&0xDF          >0
679>>>>>>>376          string              x                             \b.%-.3s
680#
681>430      string    NTLDR\ nicht\ gefunden\xFF\r\n
682>>453     string    Datentr\204gerfehler\xFF\r\n
683>>>473    string    Neustart\ mit\ beliebiger\ Taste\r      \b, Microsoft Windows XP Bootloader (german)
684>>>>417             ubyte&0xDF          >0
685>>>>>417  string              x                             %-.5s
686>>>>>>422 ubyte&0xDF          >0
687>>>>>>>422          string              x                             \b%-.3s
688>>>>>425  ubyte&0xDF          >0
689>>>>>>425 string              >\                            \b.%-.3s
690# offset variant
691>>>>379   string    \0
692>>>>>368  ubyte&0xDF          >0
693>>>>>>368 string              x                             %-.5s
694>>>>>>>373          ubyte&0xDF          >0
695>>>>>>>>373         string              x                             \b%-.3s
696#
697>430      string    NTLDR\ fehlt\xFF\r\n
698>>444     string    Datentr\204gerfehler\xFF\r\n
699>>>464    string    Neustart\ mit\ beliebiger\ Taste\r      \b, Microsoft Windows XP Bootloader (2.german)
700>>>>417             ubyte&0xDF          >0
701>>>>>417  string              x                             %-.5s
702>>>>>>422 ubyte&0xDF          >0
703>>>>>>>422          string              x                             \b%-.3s
704>>>>>425  ubyte&0xDF          >0
705>>>>>>425 string              >\                            \b.%-.3s
706# variant
707>>>>371             ubyte               >0x20
708>>>>>368  ubyte&0xDF          >0
709>>>>>>368 string              x                             %-.5s
710>>>>>>>373          ubyte&0xDF          >0
711>>>>>>>>373         string              x                             \b%-.3s
712>>>>>>376 ubyte&0xDF          >0
713>>>>>>>376          string              x                             \b.%-.3s
714#
715>430      string    NTLDR\ fehlt\xFF\r\n
716>>444     string    Medienfehler\xFF\r\n
717>>>459    string    Neustart:\ Taste\ dr\201cken\r                    \b, Microsoft Windows XP Bootloader (3.german)
718>>>>371             ubyte               >0x20
719>>>>>368  ubyte&0xDF          >0
720>>>>>>368 string              x                             %-.5s
721>>>>>>>373          ubyte&0xDF          >0
722>>>>>>>>373         string              x                             \b%-.3s
723>>>>>>376 ubyte&0xDF          >0
724>>>>>>>376          string              x                             \b.%-.3s
725# variant
726>>>>417             ubyte&0xDF          >0
727>>>>>417  string              x                             %-.5s
728>>>>>>422 ubyte&0xDF          >0
729>>>>>>>422          string              x                             \b%-.3s
730>>>>>425  ubyte&0xDF          >0
731>>>>>>425 string              >\                            \b.%-.3s
732#
733>430      string    Datentr\204ger\ entfernen\xFF\r\n
734>>454     string    Medienfehler\xFF\r\n
735>>>469    string    Neustart:\ Taste\ dr\201cken\r                    \b, Microsoft Windows XP Bootloader (4.german)
736>>>>379             string              \0
737>>>>>368  ubyte&0xDF          >0
738>>>>>>368 string              x                             %-.5s
739>>>>>>>373          ubyte&0xDF          >0
740>>>>>>>>373         string              x                             \b%-.3s
741>>>>>>376 ubyte&0xDF          >0
742>>>>>>>376          string              x                             \b.%-.3s
743# variant
744>>>>417             ubyte&0xDF          >0
745>>>>>417  string              x                             %-.5s
746>>>>>>422 ubyte&0xDF          >0
747>>>>>>>422          string              x                             \b%-.3s
748>>>>>425  ubyte&0xDF          >0
749>>>>>>425 string              >\                            \b.%-.3s
750#
751
752#>3       string    NTFS\ \ \ \040
753>389      string    Fehler\ beim\ Lesen\040
754>>407     string    des\ Datentr\204gers
755>>>426    string    NTLDR\ fehlt
756>>>>440   string    NTLDR\ ist\ komprimiert
757>>>>>464 string     Neustart\ mit\ Strg+Alt+Entf\r                    \b, Microsoft Windows XP Bootloader NTFS (german)
758#>3       string    NTFS\ \ \ \040
759>313      string    A\ disk\ read\ error\ occurred.\r
760>>345     string    A\ kernel\ file\ is\ missing\040
761>>>370    string    from\ the\ disk.\r
762>>>>484   string    NTLDR\ is\ compressed
763>>>>>429 string     Insert\ a\ system\ diskette\040
764>>>>>>454 string and\ restart\r\nthe\ system.\r             \b, Microsoft Windows XP Bootloader NTFS
765# DOS loader variants different languages,offsets
766>472      ubyte&0xDF          >0
767>>389     string    Invalid\ system\ disk\xFF\r\n
768>>>411    string    Disk\ I/O\ error
769>>>>428   string    Replace\ the\ disk,\ and\040
770>>>>>455 string     press\ any\ key                                   \b, Microsoft Windows 98 Bootloader
771#IO.SYS
772>>>>>>472 ubyte&0xDF          >0
773>>>>>>>472          string              x                             \b %-.2s
774>>>>>>>>474         ubyte&0xDF          >0
775>>>>>>>>>474        string              x                             \b%-.5s
776>>>>>>>>>>479       ubyte&0xDF          >0
777>>>>>>>>>>>479 string                   x                             \b%-.1s
778>>>>>>>480          ubyte&0xDF          >0
779>>>>>>>>480         string              x                             \b.%-.3s
780#MSDOS.SYS
781>>>>>>>483          ubyte&0xDF          >0                            \b+
782>>>>>>>>483         string              x                             \b%-.5s
783>>>>>>>>>488        ubyte&0xDF          >0
784>>>>>>>>>>488       string              x                             \b%-.3s
785>>>>>>>>491         ubyte&0xDF          >0
786>>>>>>>>>491        string              x                             \b.%-.3s
787#
788>>390     string    Invalid\ system\ disk\xFF\r\n
789>>>412    string    Disk\ I/O\ error\xFF\r\n
790>>>>429   string    Replace\ the\ disk,\ and\040
791>>>>>451 string     then\ press\ any\ key\r                           \b, Microsoft Windows 98 Bootloader
792>>388     string    Ungueltiges\ System\ \xFF\r\n
793>>>410    string    E/A-Fehler\ \ \ \ \xFF\r\n
794>>>>427   string    Datentraeger\ wechseln\ und\040
795>>>>>453 string     Taste\ druecken\r                       \b, Microsoft Windows 95/98/ME Bootloader (german)
796#WINBOOT.SYS only not spaces (0xDF)
797>>>>>>497 ubyte&0xDF          >0
798>>>>>>>497          string              x                             %-.5s
799>>>>>>>>502         ubyte&0xDF          >0
800>>>>>>>>>502        string              x                             \b%-.1s
801>>>>>>>>>>503       ubyte&0xDF          >0
802>>>>>>>>>>>503      string              x                             \b%-.1s
803>>>>>>>>>>>>504     ubyte&0xDF          >0
804>>>>>>>>>>>>>504 string                 x                             \b%-.1s
805>>>>>>505 ubyte&0xDF          >0
806>>>>>>>505          string              x                             \b.%-.3s
807#IO.SYS
808>>>>>>472 ubyte&0xDF          >0                            or
809>>>>>>>472          string              x                             \b %-.2s
810>>>>>>>>474         ubyte&0xDF          >0
811>>>>>>>>>474        string              x                             \b%-.5s
812>>>>>>>>>>479       ubyte&0xDF          >0
813>>>>>>>>>>>479 string                   x                             \b%-.1s
814>>>>>>>480          ubyte&0xDF          >0
815>>>>>>>>480         string              x                             \b.%-.3s
816#MSDOS.SYS
817>>>>>>>483          ubyte&0xDF          >0                            \b+
818>>>>>>>>483         string              x                             \b%-.5s
819>>>>>>>>>488        ubyte&0xDF          >0
820>>>>>>>>>>488       string              x                             \b%-.3s
821>>>>>>>>491         ubyte&0xDF          >0
822>>>>>>>>>491        string              x                             \b.%-.3s
823#
824>>390     string    Ungueltiges\ System\ \xFF\r\n
825>>>412    string    E/A-Fehler\ \ \ \ \xFF\r\n
826>>>>429   string    Datentraeger\ wechseln\ und\040
827>>>>>455 string     Taste\ druecken\r                       \b, Microsoft Windows 95/98/ME Bootloader (German)
828#WINBOOT.SYS only not spaces (0xDF)
829>>>>>>497 ubyte&0xDF          >0
830>>>>>>>497          string              x                             %-.7s
831>>>>>>>>504         ubyte&0xDF          >0
832>>>>>>>>>504        string              x                             \b%-.1s
833>>>>>>505 ubyte&0xDF          >0
834>>>>>>>505          string              x                             \b.%-.3s
835#IO.SYS
836>>>>>>472 ubyte&0xDF          >0                            or
837>>>>>>>472          string              x                             \b %-.2s
838>>>>>>>>474         ubyte&0xDF          >0
839>>>>>>>>>474        string              x                             \b%-.6s
840>>>>>>>480          ubyte&0xDF          >0
841>>>>>>>>480         string              x                             \b.%-.3s
842#MSDOS.SYS
843>>>>>>>483          ubyte&0xDF          >0                            \b+
844>>>>>>>>483         string              x                             \b%-.5s
845>>>>>>>>>488        ubyte&0xDF          >0
846>>>>>>>>>>488       string              x                             \b%-.3s
847>>>>>>>>491         ubyte&0xDF          >0
848>>>>>>>>>491        string              x                             \b.%-.3s
849#
850>>389     string    Ungueltiges\ System\ \xFF\r\n
851>>>411    string    E/A-Fehler\ \ \ \ \xFF\r\n
852>>>>428   string    Datentraeger\ wechseln\ und\040
853>>>>>454 string     Taste\ druecken\r                       \b, Microsoft Windows 95/98/ME Bootloader (GERMAN)
854# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes
855>>>>>>472 string              x                             %-.2s
856>>>>>>>474          ubyte&0xDF          >0
857>>>>>>>>474         string              x                             \b%-.5s
858>>>>>>>>479         ubyte&0xDF          >0
859>>>>>>>>>479        string              x                             \b%-.1s
860>>>>>>480 ubyte&0xDF          >0
861>>>>>>>480          string              x                             \b.%-.3s
862>>>>>>483 ubyte&0xDF          >0                            \b+
863>>>>>>>483          string              x                             \b%-.5s
864>>>>>>>488          ubyte&0xDF          >0
865>>>>>>>>488         string              x                             \b%-.2s
866>>>>>>>>490         ubyte&0xDF          >0
867>>>>>>>>>490        string              x                             \b%-.1s
868>>>>>>>491          ubyte&0xDF          >0
869>>>>>>>>491         string              x                             \b.%-.3s
870>479      ubyte&0xDF          >0
871>>416     string    Kein\ System\ oder\040
872>>>433    string    Laufwerksfehler
873>>>>450   string    Wechseln\ und\ Taste\ dr\201cken        \b, Microsoft DOS Bootloader (german)
874#IO.SYS
875>>>>>479  string              x                             \b %-.2s
876>>>>>>481 ubyte&0xDF          >0
877>>>>>>>481          string              x                             \b%-.6s
878>>>>>487  ubyte&0xDF          >0
879>>>>>>487 string              x                             \b.%-.3s
880#MSDOS.SYS
881>>>>>>490 ubyte&0xDF          >0                            \b+
882>>>>>>>490          string              x                             \b%-.5s
883>>>>>>>>495         ubyte&0xDF          >0
884>>>>>>>>>495        string              x                             \b%-.3s
885>>>>>>>498          ubyte&0xDF          >0
886>>>>>>>>498         string              x                             \b.%-.3s
887#
888>376      search/41 Non-System\ disk\ or\040
889>>395     search/41 disk\ error\r
890>>>407    search/41 Replace\ and\040
891>>>>419   search/41 press\                                  \b,
892>>>>419   search/41 strike\                       \b, old
893>>>>426   search/41 any\ key\ when\ ready\r                 MS or PC-DOS bootloader
894#449                          Disk\ Boot\ failure\r                   MS 3.21
895#466                          Boot\ Failure\r                         MS 3.30
896>>>>>468 search/18  \0
897#IO.SYS,IBMBIO.COM
898>>>>>>&0  string              x                             \b %-.2s
899>>>>>>>&-20         ubyte&0xDF          >0
900>>>>>>>>&-1         string              x                             \b%-.4s
901>>>>>>>>>&-16       ubyte&0xDF          >0
902>>>>>>>>>>&-1       string              x                             \b%-.2s
903>>>>>>&8  ubyte&0xDF          >0                            \b.
904>>>>>>>&-1          string              x                             \b%-.3s
905#MSDOS.SYS,IBMDOS.COM
906>>>>>>&11 ubyte&0xDF          >0                            \b+
907>>>>>>>&-1          string              x                             \b%-.5s
908>>>>>>>>&-6         ubyte&0xDF          >0
909>>>>>>>>>&-1        string              x                             \b%-.1s
910>>>>>>>>>>&-5       ubyte&0xDF          >0
911>>>>>>>>>>>&-1      string              x                             \b%-.2s
912>>>>>>>&7 ubyte&0xDF          >0                            \b.
913>>>>>>>>&-1         string              x                             \b%-.3s
914>441      string    Cannot\ load\ from\ harddisk.\n\r
915>>469     string    Insert\ Systemdisk\040
916>>>487    string    and\ press\ any\ key.\n\r               \b, MS (2.11) DOS bootloader
917#>43      string    \224R-LOADER\ \ SYS                     =label
918>54       string    SYS
919>>324     string    VASKK
920>>>495    string    NEWLDR\0                                \b, DR-DOS Bootloader (LOADER.SYS)
921#
922>98       string    Press\ a\ key\ to\ retry\0\r
923>>120     string    Cannot\ find\ file\ \0\r
924>>>139    string    Disk\ read\ error\0\r
925>>>>156   string    Loading\ ...\0                                    \b, DR-DOS (3.41) Bootloader
926#DRBIOS.SYS
927>>>>>44             ubyte&0xDF          >0
928>>>>>>44  string              x                             \b %-.6s
929>>>>>>>50 ubyte&0xDF          >0
930>>>>>>>>50          string              x                             \b%-.2s
931>>>>>>52  ubyte&0xDF          >0
932>>>>>>>52 string              x                             \b.%-.3s
933#
934>70       string    IBMBIO\ \ COM
935>>472     string    Cannot\ load\ DOS!\040
936>>>489    string    Any\ key\ to\ retry                     \b, DR-DOS Bootloader
937>>471     string    Cannot\ load\ DOS\040
938>>487     string    press\ key\ to\ retry                             \b, Open-DOS Bootloader
939#??
940>444      string    KERNEL\ \ SYS
941>>314     string    BOOT\ error!                                      \b, FREE-DOS Bootloader
942>499      string    KERNEL\ \ SYS
943>>305     string    BOOT\ err!\0                                      \b, Free-DOS Bootloader
944>449      string    KERNEL\ \ SYS
945>>319     string    BOOT\ error!                                      \b, FREE-DOS 0.5 Bootloader
946#
947>449      string    Loading\ FreeDOS
948>>0x1AF             ulelong             >0                            \b, FREE-DOS 0.95,1.0 Bootloader
949>>>497              ubyte&0xDF          >0
950>>>>497             string              x                             \b %-.6s
951>>>>>503  ubyte&0xDF          >0
952>>>>>>503 string              x                             \b%-.1s
953>>>>>>>504          ubyte&0xDF          >0
954>>>>>>>>504         string              x                             \b%-.1s
955>>>>505             ubyte&0xDF          >0
956>>>>>505  string              x                             \b.%-.3s
957#
958>331      string    Error!.0                                \b, FREE-DOS 1.0 bootloader
959#
960>125      string    Loading\ FreeDOS...\r
961>>311     string    BOOT\ error!\r                                    \b, FREE-DOS bootloader
962>>>441              ubyte&0xDF          >0
963>>>>441             string              x                             \b %-.6s
964>>>>>447  ubyte&0xDF          >0
965>>>>>>447 string              x                             \b%-.1s
966>>>>>>>448          ubyte&0xDF          >0
967>>>>>>>>448         string              x                             \b%-.1s
968>>>>449             ubyte&0xDF          >0
969>>>>>449  string              x                             \b.%-.3s
970>124      string    FreeDOS\0
971>>331     string    \ err\0                                           \b, FREE-DOS BETa 0.9 Bootloader
972# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes
973>>>497              ubyte&0xDF          >0
974>>>>497             string              x                             \b %-.6s
975>>>>>503  ubyte&0xDF          >0
976>>>>>>503 string              x                             \b%-.1s
977>>>>>>>504          ubyte&0xDF          >0
978>>>>>>>>504         string              x                             \b%-.1s
979>>>>505             ubyte&0xDF          >0
980>>>>>505  string              x                             \b.%-.3s
981>>333     string    \ err\0                                           \b, FREE-DOS BEta 0.9 Bootloader
982>>>497              ubyte&0xDF          >0
983>>>>497             string              x                             \b %-.6s
984>>>>>503  ubyte&0xDF          >0
985>>>>>>503 string              x                             \b%-.1s
986>>>>>>>504          ubyte&0xDF          >0
987>>>>>>>>504         string              x                             \b%-.1s
988>>>>505             ubyte&0xDF          >0
989>>>>>505  string              x                             \b.%-.3s
990>>334     string    \ err\0                                           \b, FREE-DOS Beta 0.9 Bootloader
991>>>497              ubyte&0xDF          >0
992>>>>497             string              x                             \b %-.6s
993>>>>>503  ubyte&0xDF          >0
994>>>>>>503 string              x                             \b%-.1s
995>>>>>>>504          ubyte&0xDF          >0
996>>>>>>>>504         string              x                             \b%-.1s
997>>>>505             ubyte&0xDF          >0
998>>>>>505  string              x                             \b.%-.3s
999>336      string    Error!\040
1000>>343     string    Hit\ a\ key\ to\ reboot.                \b, FREE-DOS Beta 0.9sr1 Bootloader
1001>>>497              ubyte&0xDF          >0
1002>>>>497             string              x                             \b %-.6s
1003>>>>>503  ubyte&0xDF          >0
1004>>>>>>503 string              x                             \b%-.1s
1005>>>>>>>504          ubyte&0xDF          >0
1006>>>>>>>>504         string              x                             \b%-.1s
1007>>>>505             ubyte&0xDF          >0
1008>>>>>505  string              x                             \b.%-.3s
1009# added by Joerg Jenderek
1010# https://www.visopsys.org/
1011# https://partitionlogic.org.uk/
1012# OEM-ID=Visopsys
1013>478                ulelong   0
1014>>(1.b+326)         string    I/O\ Error\ reading\040
1015>>>(1.b+344)        string    Visopsys\ loader\r
1016>>>>(1.b+361)       string    Press\ any\ key\ to\ continue.\r        \b, Visopsys loader
1017# http://alexfru.chat.ru/epm.html#bootprog
1018>494      ubyte     >0x4D
1019>>495     string    >E
1020>>>495    string    <S
1021#OEM-ID is not reliable
1022>>>>3     string    BootProg
1023# It just looks for a program file name at the root directory
1024# and loads corresponding file with following execution.
1025# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
1026>>>>499                       ubyte&0xDF          >0                  \b, COM/EXE Bootloader
1027>>>>>499            use                 DOS-filename
1028#If the boot sector fails to read any other sector,
1029#it prints a very short message ("RE") to the screen and hangs the computer.
1030#If the boot sector fails to find needed program in the root directory,
1031#it also hangs with another message ("NF").
1032>>>>>492            string              RENF                \b, FAT (12 bit)
1033>>>>>495            string              RENF                \b, FAT (16 bit)
1034#If the boot sector fails to read any other sector,
1035#it prints a very short message ("RE") to the screen and hangs the computer.
1036# x86 bootloader end
1037
1038# added by Joerg Jenderek at Feb 2013 according to https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
1039# and https://en.wikipedia.org/wiki/File_Allocation_Table#FS_Information_Sector
1040>0                  string              RRaA
1041>>0x1E4             string              rrAa                \b, FSInfosector
1042#>>0x1FC  uleshort  =0                  SHOULD BE ZERO
1043>>>0x1E8  ulelong             <0xffffffff         \b, %u free clusters
1044>>>0x1EC  ulelong             <0xffffffff         \b, last allocated cluster %u
1045
1046# updated by Joerg Jenderek at Sep 2007
1047>3        ubyte     0
1048#no active flag
1049>>446     ubyte     0
1050# partition 1 not empty
1051>>>450    ubyte     >0
1052# partitions 3,4 empty
1053>>>>482             ubyte     0
1054>>>>>498  ubyte     0
1055# partition 2 ID=0,5,15
1056>>>>>>466 ubyte     <0x10
1057>>>>>>>466          ubyte     0x05                          \b, extended partition table
1058>>>>>>>466          ubyte     0x0F                          \b, extended partition table (LBA)
1059>>>>>>>466          ubyte     0x0                           \b, extended partition table (last)
1060
1061# DOS x86 sector separated and moved from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
1062
1063>0x200    lelong    0x82564557                    \b, BSD disklabel
1064
1065# by Joerg Jenderek at Apr 2013
1066#         Print the DOS filenames from directory entry form with 8 right space padded bytes + 3 bytes for extension
1067#         like IO.SYS. MSDOS.SYS , KERNEL.SYS , DRBIO.SYS
10680         name                          DOS-filename
1069# space=0x20 (00100000b) means empty
1070>0                            ubyte&0xDF          >0
1071>>0                           ubyte               x                   \b%c
1072>>>1                          ubyte&0xDF          >0
1073>>>>1                         ubyte               x                   \b%c
1074>>>>>2                        ubyte&0xDF          >0
1075>>>>>>2                       ubyte               x                   \b%c
1076>>>>>>>3            ubyte&0xDF          >0
1077>>>>>>>>3           ubyte               x                   \b%c
1078>>>>>>>>>4                    ubyte&0xDF          >0
1079>>>>>>>>>>4                   ubyte               x                   \b%c
1080>>>>>>>>>>>5                  ubyte&0xDF          >0
1081>>>>>>>>>>>>5                 ubyte               x                   \b%c
1082>>>>>>>>>>>>>6                ubyte&0xDF          >0
1083>>>>>>>>>>>>>>6               ubyte               x                   \b%c
1084>>>>>>>>>>>>>>>7    ubyte&0xDF          >0
1085>>>>>>>>>>>>>>>>7   ubyte               x                   \b%c
1086# DOS filename extension
1087>>8                           ubyte&0xDF          >0                  \b.
1088>>>8                          ubyte               x                   \b%c
1089>>>>9                         ubyte&0xDF          >0
1090>>>>>9                        ubyte               x                   \b%c
1091>>>>>>10            ubyte&0xDF          >0
1092>>>>>>>10           ubyte               x                   \b%c
1093#         Print 2 following DOS filenames from directory entry form
1094#         like IO.SYS+MSDOS.SYS or ibmbio.com+ibmdos.com
10950         name                          2xDOS-filename
1096# display 1 space
1097>0                            ubyte               x                   \b
1098>0                            use                 DOS-filename
1099>11                           ubyte               x                   \b+
1100>11                           use                 DOS-filename
1101
1102# https://en.wikipedia.org/wiki/Master_boot_record#PTE
1103# display standard partition table
11040         name                                    partition-table
1105#>0                 ubyte               x         PARTITION-TABLE
1106# test and display 1st til 4th partition table entry
1107>0                  use                           partition-entry-test
1108>16                 use                           partition-entry-test
1109>32                 use                           partition-entry-test
1110>48                 use                           partition-entry-test
1111#                   test for entry of partition table
11120         name                                    partition-entry-test
1113# partition type ID > 0
1114>4                  ubyte               >0
1115# active flag 0
1116>>0                 ubyte               0
1117>>>0                use                 partition-entry
1118# active flag 0x80, 0x81, ...
1119>>0                 ubyte               >0x7F
1120>>>0                use                 partition-entry
1121#                   Print entry of partition table
11220         name                                    partition-entry
1123# partition type ID > 0
1124>4                  ubyte               >0        \b; partition
1125>>64                leshort             0xAA55    1
1126>>48                leshort             0xAA55    2
1127>>32                leshort             0xAA55    3
1128>>16                leshort             0xAA55    4
1129>>4                 ubyte               x         : ID=%#x
1130>>0                 ubyte&0x80          0x80      \b, active
1131>>0                 ubyte               >0x80     %#x
1132>>1                 ubyte               x         \b, start-CHS (
1133>>1                 use                 partition-chs
1134>>5                 ubyte               x         \b), end-CHS (
1135>>5                 use                 partition-chs
1136>>8                 ulelong             x         \b), startsector %u
1137>>12                ulelong             x         \b, %u sectors
1138#                   Print cylinder,head,sector (CHS) of partition entry
11390         name                                    partition-chs
1140# cylinder
1141>1                  ubyte               x         \b0x
1142>1                  ubyte&0xC0          0x40      \b1
1143>1                  ubyte&0xC0          0x80      \b2
1144>1                  ubyte&0xC0          0xC0      \b3
1145>2                  ubyte               x         \b%x
1146# head
1147>0                  ubyte               x         \b,%u
1148# sector
1149>1                  ubyte&0x3F          x         \b,%u
1150
1151# FATX
11520                   string              FATX                FATX filesystem data
1153
1154# romfs filesystems - Juan Cespedes <cespedes@debian.org>
11550         string              -rom1fs-  romfs filesystem, version 1
1156>8        belong    x                             %d bytes,
1157>16       string    x                             named %s.
1158
1159# netboot image - Juan Cespedes <cespedes@debian.org>
11600         lelong              0x1b031336L         Netboot image,
1161>4        lelong&0xFFFFFF00   0
1162>>4       lelong&0x100        0x000               mode 2
1163>>4       lelong&0x100        0x100               mode 3
1164>4        lelong&0xFFFFFF00   !0        unknown mode
1165
11660x18b     string    OS/2      OS/2 Boot Manager
1167
1168# updated by Joerg Jenderek at Oct 2008 and Sep 2012
1169# https://syslinux.zytor.com/iso.php
1170# tested with versions 1.47,1.48,1.49,1.50,1.62,1.76,2.00,2.10;3.00,3.11,3.31,;3.70,3.71,3.73,3.75,3.80,3.82,3.84,3.86,4.01,4.03 and 4.05
1171# assembler instructions: cli;jmp 0:7Cyy (yy=0x40,0x5e,0x6c,0x6e,0x77);nop;nop
11720         ulequad&0x909000007cc0eafa    0x909000007c40eafa
1173>631      search/689          ISOLINUX\           isolinux Loader
1174>>&0      string              x                   (version %-4.4s)
1175# https://syslinux.zytor.com/pxe.php
1176# assembler instructions: jmp 7C05
11770         ulelong   0x007c05ea                    pxelinux loader (version 2.13 or older)
1178# assembler instructions: pushfd;pushad
11790         ulelong   0x60669c66                    pxelinux loader
1180# assembler instructions: jmp 05
11810         ulelong   0xc00005ea                    pxelinux loader (version 3.70 or newer)
1182# https://syslinux.zytor.com/wiki/index.php/SYSLINUX
11830         string    LDLINUX\ SYS\                 SYSLINUX loader
1184>12       string    x                             (older version %-4.4s)
11850         string    \r\nSYSLINUX\                 SYSLINUX loader
1186>11       string    x                             (version %-4.4s)
1187# syslinux updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
1188# assembler instructions: jmp yy (yy=0x3c,0x58);nop;"SYSLINUX"
11890         ulelong&0x80909bEB  0x009018EB
1190# OEM-ID not always "SYSLINUX"
1191>434      search/47 Boot\ failed
1192# followed by \r\n\0 or :\
1193>>482     search/132          \0LDLINUX\ SYS                Syslinux bootloader (version 2.13 or older)
1194>>1       ubyte               0x58                          Syslinux bootloader (version 3.0-3.9)
1195>459      search/30 Boot\ error\r\n\0
1196>>1       ubyte               0x58                          Syslinux bootloader (version 3.10 or newer)
1197# SYSLINUX MBR updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
1198# assembler instructions: mov di,0600h;mov cx,0100h
119916        search/4  \xbf\x00\x06\xb9\x00\x01
1200# to display SYSLINUX MBR (36) before old DOS/MBR boot sector one with partition table (strength=50+21)
1201!:strength +36
1202>94       search/249          Missing\ operating\ system
1203# followed by \r for versions older 3.35 , .\r for versions newer 3.52 and point for other
1204# skip Ranish MBR
1205>>408     search/4  HD1/\0
1206>>408     default             x
1207>>>250    search/118          \0Operating\ system\ load               SYSLINUX MBR
1208# followed by "ing " or space
1209>>>>292   search/98 error
1210>>>>>&0   string              \r                                                (version 3.35 or older)
1211>>>>>&0   string              .\r                                               (version 3.52 or newer)
1212>>>>>&0   default             x                                                 (version 3.36-3.51 )
1213>368      search/106          \0Disk\ error\ on\ boot\r\n             SYSLINUX GPT-MBR
1214>>156     search/10 \0Boot\ partition\ not\ found\r\n
1215>>>270    search/10 \0OS\ not\ bootable\r\n                           (version 3.86 or older)
1216>>174     search/10 \0Missing\ OS\r\n
1217>>>189    search/10 \0Multiple\ active\ partitions\r\n      (version 4.00 or newer)
1218# SYSLINUX END
1219
1220# NetBSD mbr variants (master-boot-code version 1.22) added by Joerg Jenderek at Nov 2012
1221# assembler instructions: xor ax,ax;mov ax,ss;mov sp,0x7c00;mov       ax,
12220         ubequad             0x31c08ed0bc007c8e
1223# mbr_bootsel magic before partition table not reliable with small ipl fragments
1224#>444     uleshort  0xb5e1
1225>0004     uleshort  x
1226# ERRorTeXT
1227>>181     search/166                    Error\ \0\r\n                                     NetBSD mbr
1228# NT Drive Serial Number https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DS
1229>>>0x1B8  ubelong             >0                                                \b,Serial %#-.8x
1230# BOOTSEL definitions contains assembler instructions: int 0x13;pop dx;push dx;push dx
1231>>>0xbb             search/71 \xcd\x13\x5a\x52\x52                              \b,bootselector
1232# BOOT_EXTENDED definitions contains assembler instructions:
1233# xchg ecx,edx;addl ecx,edx;movw lba_info,si;movb 0x42,ah;pop dx;push dx;int 0x13
1234>>>0x96   search/1  \x66\x87\xca\x66\x01\xca\x66\x89\x16\x3a\x07\xbe\x32\x07\xb4\x42\x5a\x52\xcd\x13          \b,boot extended
1235# COM_PORT_VAL definitions contains assembler instructions: outb al,dx;add 5,dl;inb %dx;test 0x40,al
1236>>>0x130  search/55 \xee\x80\xc2\x05\xec\xa8\x40            \b,serial IO
1237# not TERSE_ERROR
1238>>>196              search/106          No\ active\ partition\0
1239>>>>&0              string              Disk\ read\ error\0
1240>>>>>&0             string              No\ operating\ system\0                           \b,verbose
1241# not NO_CHS definitions contains assembler instructions: pop dx;push dx;movb $8,ah;int0x13
1242>>>0x7d             search/7  \x5a\x52\xb4\x08\xcd\x13                \b,CHS
1243# not NO_LBA_CHECK definitions contains assembler instructions: movw 0x55aa,bx;movb 0x41,ah;pop     dx;push   dx;int 0x13
1244>>>0xa4             search/84 \xbb\xaa\x55\xb4\x41\x5a\x52\xcd\x13    \b,LBA-check
1245# assembler instructions: movw nametab,bx
1246>>>0x26       search/21       \xBB\x94\x07
1247# not NO_BANNER definitions contains assembler instructions: mov banner,si;call message_crlf
1248>>>>&-9   ubequad&0xBE00f0E800febb94    0xBE0000E80000bb94
1249>>>>>181  search/166                    Error\ \0
1250# "a: disk" , "Fn: diskn" or "NetBSD MBR boot"
1251>>>>>>&3  string                        x                                       \b,"%s"
1252>>>446    use                 partition-table
1253# Andrea Mazzoleni AdvanceCD mbr loader of http://advancemame.sourceforge.net/boot-readme.html
1254# added by Joerg Jenderek at Nov 2012 for versions 1.3 - 1.4
1255# assembler instructions: jmp short 0x58;nop;ASCII
12560         ubequad&0xeb58908000000000    0xeb58900000000000
1257# assembler instructions: cli;xor ax,ax;mov ds,ax;mov es,ax;mov ss,
1258>(1.b+2)  ubequad                       0xfa31c08ed88ec08e
1259# Error messages at end of code
1260>>376               string    No\ operating\ system\r\n\0
1261>>>398              string    Disk\ error\r\n\0FDD\0HDD\0
1262>>>>419             string    \ EBIOS\r\n\0                                     AdvanceMAME mbr
1263
1264# Neil Turton mbr loader variant of https://www.chiark.greenend.org.uk/~neilt/mbr/
1265# added by Joerg Jenderek at Mar 2011 for versions 1.0.0 - 1.1.11
1266# for 1st version assembler instructions:         cld;xor ax,ax;mov DS,ax;MOV ES,AX;mov SI,
1267# or                                                        cld;xor ax,ax;mov SS,ax;XOR SP,SP;mov DS,
12680         ulequad&0xcE1b40D48EC031FC    0x8E0000D08EC031FC
1269# pointer to the data starting with Neil Turton signature string
1270>(0x1BC.s)                    string              NDTmbr
1271>>&-14                        string              1234F\0                       Turton mbr (
1272# parameters also viewed by install-mbr --list
1273>>>(0x1BC.s+7)                ubyte               x                             \b%u<=
1274>>>(0x1BC.s+9)                ubyte               x                             \bVersion<=%u
1275#>>>(0x1BC.s+8)               ubyte               x                             asm_flag_%x
1276>>>(0x1BC.s+8)                ubyte&1             1                             \b,Y2K-Fix
1277# variant used by testdisk of https://www.cgsecurity.org/wiki/Menu_MBRCode
1278>>>(0x1BC.s+8)                ubyte&2             2                             \b,TestDisk
1279#0x1~1,..,0x8~4,0x10~F,0x80~A enabled
1280#>>>(0x1BC.s+10)              ubyte               x                             \b,flags %#x
1281#0x0~1,0x1~2,...,0x3~4,0x4~F,0x7~D default boot
1282#>>>(0x1BC.s+11)              ubyte               x                             \b,cfg_def %#x
1283# for older versions
1284>>>(0x1BC.s+9)                ubyte               <2
1285#>>>>(0x1BC.s+12)   ubyte               18                            \b,%hhu/18 seconds
1286>>>>(0x1BC.s+12)    ubyte               !18                           \b,%u/18 seconds
1287# floppy A: or B:
1288>>>>(0x1BC.s+13)    ubyte               <2                            \b,floppy %#x
1289>>>>(0x1BC.s+13)    ubyte               >1
1290# 1st hard disc
1291#>>>>>(0x1BC.s+13)  ubyte               0x80                          \b,drive %#x
1292# not 1st hard disc
1293>>>>>(0x1BC.s+13)   ubyte               !0x80                         \b,drive %#x
1294# for version >= 2 maximal timeout can be 65534
1295>>>(0x1BC.s+9)                ubyte               >1
1296#>>>>(0x1BC.s+12)   uleshort  18                            \b,%u/18 seconds
1297>>>>(0x1BC.s+12)    uleshort  !18                           \b,%u/18 seconds
1298# floppy A: or B:
1299>>>>(0x1BC.s+14)    ubyte               <2                            \b,floppy %#x
1300>>>>(0x1BC.s+14)    ubyte               >1
1301# 1st hard disc
1302#>>>>>(0x1BC.s+14)  ubyte               0x80                          \b,drive %#x
1303# not 1st hard disc
1304>>>>>(0x1BC.s+14)   ubyte               !0x80                         \b,drive %#x
1305>>>0      ubyte               x                                                 \b)
1306
1307# added by Joerg Jenderek
1308# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
1309# grub-1.94/kern/i386/pc/startup.S
1310# https://www.gnu.org/software/grub/manual/grub.html#Embedded-data
1311# usual values are marked with comments to get only information of strange GRUB loaders
13120x200     uleshort            0x70EA
1313# found only version 3.{1,2}
1314>0x206              ubeshort  >0x0300
1315# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00"
1316>>0x212   ubyte               >0x29
1317>>>0x213  ubyte               >0x29
1318# not iso9660_stage1_5
1319#>>>0     ulelong&0x00BE5652  0x00BE5652
1320>>>>0x213           ubyte               >0x29               GRand Unified Bootloader
1321# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2"
1322>>>>0x217           ubyte               0xFF                stage1_5
1323>>>>0x217           ubyte               <0xFF               stage2
1324>>>>0x206 ubyte               x                   \b version %u
1325>>>>0x207 ubyte               x                   \b.%u
1326# module_size for 1.94
1327>>>>0x208 ulelong             <0xffffff \b, installed partition %u
1328#>>>>0x208          ulelong             =0xffffff \b, %lu (default)
1329>>>>0x208 ulelong             >0xffffff \b, installed partition %u
1330# GRUB 0.5.95 unofficial
1331>>>>0x20C ulelong&0x2E300000 0x2E300000
1332# 0=stage2          1=ffs     2=e2fs    3=fat     4=minix   5=reiserfs
1333>>>>>0x20C          ubyte               x                   \b, identifier %#x
1334#>>>>>0x20D         ubyte               =0                  \b, LBA flag %#x (default)
1335>>>>>0x20D          ubyte               >0                  \b, LBA flag %#x
1336# GRUB version as string
1337>>>>>0x20E          string              >\0                 \b, GRUB version %-s
1338# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
1339>>>>>>0x215         ulong               0xffffffff
1340>>>>>>>0x219        string              >\0                 \b, configuration file %-s
1341>>>>>>0x215         ulong               !0xffffffff
1342>>>>>>>0x215        string              >\0                 \b, configuration file %-s
1343# newer GRUB versions
1344>>>>0x20C ulelong&0x2E300000 !0x2E300000
1345##>>>>>0x20C        ulelong             =0                  \b, saved entry %d (usual)
1346>>>>>0x20C          ulelong             >0                  \b, saved entry %d
1347# for 1.94 contains kernel image size
1348# for 0.93,0.94,0.96,0.97
1349# 0=stage2          1=ffs     2=e2fs    3=fat     4=minix   5=reiserfs          6=vstafs  7=jfs     8=xfs     9=iso9660 a=ufs2
1350>>>>>0x210          ubyte               x                   \b, identifier %#x
1351# The flag for LBA forcing is in most cases 0
1352#>>>>>0x211         ubyte               =0                  \b, LBA flag %#x (default)
1353>>>>>0x211          ubyte               >0                  \b, LBA flag %#x
1354# GRUB version as string
1355>>>>>0x212          string              >\0                 \b, GRUB version %-s
1356# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
1357>>>>>0x217          ulong               0xffffffff
1358>>>>>>0x21b         string              >\0                 \b, configuration file %-s
1359>>>>>0x217          ulong               !0xffffffff
1360>>>>>>0x217         string              >\0                 \b, configuration file %-s
1361
1362# DOS x86 sector updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
1363# JuMP short     bootcodeoffset NOP assembler instructions will usually be EB xx 90
1364# over BIOS parameter block (BPB)
1365# https://thestarman.pcministry.com/asm/2bytejumps.htm#FWD
1366# older drives may use Near JuMP instruction E9 xx xx
1367# minimal short forward jump found 0x29 for bootloaders or 0x0
1368# maximal short forward jump is 0x7f
1369# OEM-ID is empty or contain readable bytes
13700                   ulelong&0x804000E9  0x000000E9
1371!:strength          +60
1372# mtools-3.9.8/msdos.h
1373# usual values are marked with comments to get only information of strange FAT systems
1374# valid sectorsize must be a power of 2 from 32 to 32768
1375>11                 uleshort&0x001f     0
1376>>11                uleshort  <32769
1377>>>11               uleshort  >31
1378>>>>21              ubyte&0xf0          0xF0
1379>>>>>0              ubyte               0xEB                DOS/MBR boot sector
1380>>>>>>1             ubyte               x                   \b, code offset %#x+2
1381>>>>>0              ubyte               0xE9
1382>>>>>>1             uleshort  x                   \b, code offset %#x+3
1383>>>>>3              string              >\0                 \b, OEM-ID "%-.8s"
1384#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
1385>>>>>>8             string              IHC                 \b cached by Windows 9M
1386>>>>>11             uleshort  >512                \b, Bytes/sector %u
1387#>>>>>11  uleshort  =512                \b, Bytes/sector %u=512 (usual)
1388>>>>>11             uleshort  <512                \b, Bytes/sector %u
1389>>>>>13             ubyte               >1                  \b, sectors/cluster %u
1390#>>>>>13  ubyte               =1                  \b, sectors/cluster %u (usual on Floppies)
1391# for lazy FAT32 implementation like Transcend digital photo frame PF830
1392>>>>>82             string/c  fat32
1393>>>>>>14  uleshort  !32                 \b, reserved sectors %u
1394#>>>>>>14 uleshort  =32                 \b, reserved sectors %u (usual Fat32)
1395>>>>>82             string/c  !fat32
1396>>>>>>14  uleshort  >1                  \b, reserved sectors %u
1397#>>>>>>14 uleshort  =1                  \b, reserved sectors %u (usual FAT12,FAT16)
1398#>>>>>>14 uleshort  0                   \b, reserved sectors %u (usual NTFS)
1399>>>>>16             ubyte               >2                  \b, FATs %u
1400#>>>>>16  ubyte               =2                  \b, FATs %u (usual)
1401>>>>>16             ubyte               =1                  \b, FAT  %u
1402>>>>>16             ubyte               >0
1403>>>>>17             uleshort  >0                  \b, root entries %u
1404#>>>>>17  uleshort  =0                  \b, root entries %hu=0 (usual Fat32)
1405>>>>>19             uleshort  >0                  \b, sectors %u (volumes <=32 MB)
1406#>>>>>19  uleshort  =0                  \b, sectors %hu=0 (usual Fat32)
1407>>>>>21             ubyte               >0xF0               \b, Media descriptor %#x
1408#>>>>>21  ubyte               =0xF0               \b, Media descriptor %#x (usual floppy)
1409>>>>>21             ubyte               <0xF0               \b, Media descriptor %#x
1410>>>>>22             uleshort  >0                  \b, sectors/FAT %u
1411#>>>>>22  uleshort  =0                  \b, sectors/FAT %hu=0 (usual Fat32)
1412>>>>>24             uleshort  x                   \b, sectors/track %u
1413>>>>>26             ubyte               >2                  \b, heads %u
1414#>>>>>26  ubyte               =2                  \b, heads %u (usual floppy)
1415>>>>>26             ubyte               =1                  \b, heads %u
1416# valid only for sector sizes with more then 32 Bytes
1417>>>>>11             uleshort  >32
1418# https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#Extended_BIOS_Parameter_Block
1419# skip for values 2,2Ah,70h,73h,DFh
1420# and continue for extended boot signature values 0,28h,29h,80h
1421>>>>>>38  ubyte&0x56          =0
1422>>>>>>>28 ulelong             >0                  \b, hidden sectors %u
1423#>>>>>>>28          ulelong             =0                  \b, hidden sectors %u (usual floppy)
1424>>>>>>>32 ulelong             >0                  \b, sectors %u (volumes > 32 MB)
1425#>>>>>>>32          ulelong             =0                  \b, sectors %u (volumes > 32 MB)
1426# FAT<32 bit specific
1427>>>>>>>82 string/c  !fat32
1428#>>>>>>>>36         ubyte               0x80                \b, physical drive %#x=0x80 (usual harddisk)
1429#>>>>>>>>36         ubyte               0                   \b, physical drive %#x=0 (usual floppy)
1430>>>>>>>>36          ubyte               !0x80
1431>>>>>>>>>36         ubyte               !0                  \b, physical drive %#x
1432# VGA-copy CRC or
1433# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
1434>>>>>>>>37          ubyte               >0                  \b, reserved %#x
1435#>>>>>>>>37         ubyte               =0                  \b, reserved %#x
1436# extended boot signature value is 0x80 for NTFS, 0x28 or 0x29 for others
1437>>>>>>>>38          ubyte               !0x29               \b, dos < 4.0 BootSector (%#x)
1438>>>>>>>>38          ubyte&0xFE          =0x28
1439>>>>>>>>>39         ulelong             x                   \b, serial number %#x
1440>>>>>>>>38          ubyte               =0x29
1441>>>>>>>>>43         string              <NO\ NAME \b, label: "%11.11s"
1442>>>>>>>>>43         string              >NO\ NAME \b, label: "%11.11s"
1443>>>>>>>>>43         string              =NO\ NAME \b, unlabeled
1444# there exist some old floppies without word FAT at offset 54
1445# a word like "FATnm   " is only a hint for a FAT size on nm-bits
1446# Normally the number of clusters is calculated by the values of BPP.
1447# if it is small enough FAT is 12 bit, if it is too big enough FAT is 32 bit,
1448# otherwise FAT is 16 bit.
1449# http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-fat-widths.html
1450>>>>>82             string/c  !fat32
1451>>>>>>54  string              FAT12               \b, FAT (12 bit)
1452>>>>>>54  string              FAT16               \b, FAT (16 bit)
1453>>>>>>54  default             x
1454# determinate FAT bit size by media descriptor
1455# small floppies implies FAT12
1456>>>>>>>21 ubyte               <0xF0               \b, FAT (12 bit by descriptor)
1457# with media descriptor F0h floppy or maybe superfloppy with FAT16
1458>>>>>>>21 ubyte               =0xF0
1459# superfloppy (many sectors) implies FAT16
1460>>>>>>>>32          ulelong             >0xFFFF             \b, FAT (16 bit by descriptor+sectors)
1461# no superfloppy with media descriptor F0h implies FAT12
1462>>>>>>>>32          default             x                   \b, FAT (12 bit by descriptor+sectors)
1463# with media descriptor F8h floppy or hard disc with FAT12 or FAT16
1464>>>>>>>21 ubyte               =0xF8
1465# 360 KiB with media descriptor F8h, 9 sectors per track ,single sided floppy implies FAT12
1466>>>>>>>>19          ubequad   0xd002f80300090001  \b, FAT (12 bit by descriptor+geometry)
1467# hard disc with FAT12 or FAT16
1468>>>>>>>>19          default             x                   \b, FAT (1Y bit by descriptor)
1469# with media descriptor FAh floppy, RAM disc with FAT12 or FAT16 or Tandy hard disc
1470>>>>>>>21 ubyte               =0xFA
1471# 320 KiB with media descriptor FAh, 8 sectors per track ,single sided floppy implies FAT12
1472>>>>>>>>19          ubequad   0x8002fa0200080001  \b, FAT (12 bit by descriptor+geometry)
1473# RAM disc with FAT12 or FAT16 or Tandy hard disc
1474>>>>>>>>19          default             x                   \b, FAT (1Y bit by descriptor)
1475# others are floppy
1476>>>>>>>21 default             x                   \b, FAT (12 bit by descriptor)
1477# FAT32 bit specific
1478>>>>>82             string/c  fat32               \b, FAT (32 bit)
1479>>>>>>36  ulelong             x                   \b, sectors/FAT %u
1480# https://technet.microsoft.com/en-us/library/cc977221.aspx
1481>>>>>>40  uleshort  >0                  \b, extension flags %#x
1482#>>>>>>40 uleshort  =0                  \b, extension flags %hu
1483>>>>>>42  uleshort  >0                  \b, fsVersion %u
1484#>>>>>>42 uleshort  =0                  \b, fsVersion %u (usual)
1485>>>>>>44  ulelong             >2                  \b, rootdir cluster %u
1486#>>>>>>44 ulelong             =2                  \b, rootdir cluster %u
1487#>>>>>>44 ulelong             =1                  \b, rootdir cluster %u
1488>>>>>>48  uleshort  >1                  \b, infoSector %u
1489#>>>>>>48 uleshort  =1                  \b, infoSector %u (usual)
1490>>>>>>48  uleshort  <1                  \b, infoSector %u
1491# 0 or 0xFFFF instead of usual 6 means no backup sector
1492>>>>>>50  uleshort  =0xFFFF             \b, no Backup boot sector
1493>>>>>>50  uleshort  =0                  \b, no Backup boot sector
1494#>>>>>>50 uleshort  =6                  \b, Backup boot sector %u (usual)
1495>>>>>>50  default             x
1496>>>>>>>50 uleshort  x                   \b, Backup boot sector %u
1497# corrected by Joerg Jenderek at Feb 2011 according to https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
1498>>>>>>52  ulelong             >0                  \b, reserved1 %#x
1499>>>>>>56  ulelong             >0                  \b, reserved2 %#x
1500>>>>>>60  ulelong             >0                  \b, reserved3 %#x
1501# same structure as FAT1X
1502#>>>>>>64 ubyte               =0x80               \b, physical drive %#x=80 (usual harddisk)
1503#>>>>>>64 ubyte               =0                  \b, physical drive %#x=0 (usual floppy)
1504>>>>>>64  ubyte               !0x80
1505>>>>>>>64 ubyte               >0                  \b, physical drive %#x
1506# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
1507>>>>>>65  ubyte               >0                  \b, reserved %#x
1508>>>>>>66  ubyte               !0x29               \b, dos < 4.0 BootSector (%#x)
1509>>>>>>66  ubyte               =0x29
1510>>>>>>>67 ulelong             x                   \b, serial number %#x
1511>>>>>>>71 string              <NO\ NAME \b, label: "%11.11s"
1512>>>>>>>71 string              >NO\ NAME \b, label: "%11.11s"
1513>>>>>>>71 string              =NO\ NAME \b, unlabeled
1514# additional tests for floppy image added by Joerg Jenderek
1515# no fixed disk
1516>>>>>21             ubyte               !0xF8
1517# floppy media with 12 bit FAT
1518>>>>>>54  string              !FAT16
1519# test for FAT after bootsector
1520>>>>>>>(11.s)       ulelong&0x00ffffF0  0x00ffffF0          \b, followed by FAT
1521# floppy image
1522!:mime application/x-ima
1523# NTFS specific added by Joerg Jenderek at Mar 2011 according to https://thestarman.pcministry.com/asm/mbr/NTFSBR.htm
1524# and http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/bios-parameter-block.html
1525# 0 FATs
1526>>>>>16   ubyte               =0
1527# 0 root entries
1528>>>>>>17  uleshort  =0
1529# 0 DOS sectors
1530>>>>>>>19 uleshort  =0
1531# 0 sectors/FAT
1532# dos < 4.0 BootSector value found is 0x80
1533#38       ubyte               =0x80                         \b, dos < 4.0 BootSector (%#x)
1534>>>>>>>>22          uleshort  =0                  \b; NTFS
1535>>>>>>>>>24         uleshort  >0                  \b, sectors/track %u
1536>>>>>>>>>36         ulelong             !0x800080 \b, physical drive %#x
1537>>>>>>>>>40         ulequad             >0                  \b, sectors %lld
1538>>>>>>>>>48         ulequad             >0                  \b, $MFT start cluster %lld
1539>>>>>>>>>56         ulequad             >0                  \b, $MFTMirror start cluster %lld
1540# Values 0 to 127 represent MFT record sizes of 0 to 127 clusters.
1541# Values 128 to 255 represent MFT record sizes of 2^(256-N) bytes.
1542>>>>>>>>>64         lelong              <256
1543>>>>>>>>>>64        lelong              <128                \b, clusters/RecordSegment %d
1544>>>>>>>>>>64        ubyte               >127                \b, bytes/RecordSegment 2^(-1*%i)
1545# Values 0 to 127 represent index block sizes of 0 to 127 clusters.
1546# Values 128 to 255 represent index block sizes of 2^(256-N) byte
1547>>>>>>>>>68         ulelong             <256
1548>>>>>>>>>>68        ulelong             <128                \b, clusters/index block %d
1549#>>>>>>>>>>68       ulelong             >127                \b, bytes/index block 2^(256-%d)
1550>>>>>>>>>>68        ubyte               >127                \b, bytes/index block 2^(-1*%i)
1551>>>>>>>>>72         ulequad             x                   \b, serial number 0%llx
1552>>>>>>>>>80         ulelong             >0                  \b, checksum %#x
1553#>>>>>>>>>80        ulelong             =0                  \b, checksum %#x=0 (usual)
1554# unicode loadername size jump
1555>>>>>>>>>(0x200.s*2)          ubyte                                   x
1556# in next sector loadername terminated by unicode CTRL-D and $
1557>>>>>>>>>>&0x1FF    ulequad&0x0000FFffFFffFF00    0x0000002400040000 \b; contains
1558# if 2nd NTFS sectors is found then assume whole filesystem
1559#!:mime             application/x-raw-disk-image
1560!:ext               img/bin/ntfs
1561>>>>>>>>>>>0x200    use                                     ntfs-sector2
1562
1563# For 2nd NTFS sector added by Joerg Jenderek at Jan 2013, Mar 2019
1564# https://thestarman.pcministry.com/asm/mbr/NTFSbrHexEd.htm
1565# unused assembler instructions short JMP y2;NOP;NOP
15660x056               ulelong&0xFFFF0FFF  0x909002EB          NTFS
1567#!:mime             application/octet-stream
1568!:ext               bin
1569>0                  use                 ntfs-sector2
1570# https://memory.dataram.com/products-and-services/software/ramdisk
1571# assembler instructions JMP C000;NOP
15720x056               ulelong                       0x9000c0e9          NTFS
1573#!:mime             application/octet-stream
1574!:ext               bin
1575>0                  use                 ntfs-sector2
1576# check for characteristics of second NTFS sector and then display loader name
15770                   name                ntfs-sector2
1578# number of utf16 characters of loadername
1579>0                  uleshort  <8
1580# unused assembler instructions JMP y2;NOP;NOP or JMP C000;NOP
1581>>0x056             ulelong&0xFF0000FD  0x900000E9
1582# loadernames are NTLDR,CMLDR,PELDR,$LDR$ or BOOTMGR
1583>>>0x002            lestring16          x         bootstrap %-5.5s
1584# check for 7 character length of loader name like BOOTMGR
1585>>>0                uleshort  7
1586>>>>0x0c  lestring16          x         \b%-2.2s
1587### DOS,NTFS boot sectors end
1588
1589# ntfsclone-image is a special save format for NTFS volumes,
1590# created and restored by the ntfsclone program
15910         string    \0ntfsclone-image   ntfsclone image,
1592>0x10     byte      x                             version %d.
1593>0x11     byte      x                             \b%d,
1594>0x12     lelong    x                             cluster size %d,
1595>0x16     lequad    x                             device size %lld,
1596>0x1e     lequad    x                             %lld total clusters,
1597>0x26     lequad    x                             %lld clusters in use
1598
1599
16000         name                ffsv1
1601>8404     string              x                   last mounted on %s,
1602#>9504    ledate              x                   last checked at %s,
1603>8224     ledate              x                   last written at %s,
1604>8401     byte                x                   clean flag %d,
1605>8228     lelong              x                   number of blocks %d,
1606>8232     lelong              x                   number of data blocks %d,
1607>8236     lelong              x                   number of cylinder groups %d,
1608>8240     lelong              x                   block size %d,
1609>8244     lelong              x                   fragment size %d,
1610>8252     lelong              x                   minimum percentage of free blocks %d,
1611>8256     lelong              x                   rotational delay %dms,
1612>8260     lelong              x                   disk rotational speed %drps,
1613>8320     lelong              0                   TIME optimization
1614>8320     lelong              1                   SPACE optimization
1615
16169564      lelong              0x00011954          Unix Fast File system [v1] (little-endian),
1617>0        use                 ffsv1
1618
16199564      belong              0x00011954          Unix Fast File system [v1] (big-endian),
1620>7168   belong                0x4c41424c          Apple UFS Volume
1621>>7186  string                x                   named %s,
1622>>7176  belong                x                   volume label version %d,
1623>>7180  bedate                x                   created on %s,
1624>0        use                 \^ffsv1
1625
16260         name                ffsv2
1627>212      string              x                   last mounted on %s,
1628>680      string              >\0                 volume name %s,
1629>1072     leqldate  x                   last written at %s,
1630>209      byte                x                   clean flag %d,
1631>210      byte                x                   readonly flag %d,
1632>1080     lequad              x                   number of blocks %lld,
1633>1088     lequad              x                   number of data blocks %lld,
1634>44       lelong              x                   number of cylinder groups %d,
1635>48       lelong              x                   block size %d,
1636>52       lelong              x                   fragment size %d,
1637>1196     lelong              x                   average file size %d,
1638>1200     lelong              x                   average number of files in dir %d,
1639>1104     lequad              x                   pending blocks to free %lld,
1640>1112     lelong              x                   pending inodes to free %d,
1641>712      lequad              x                   system-wide uuid %0llx,
1642>60       lelong              x                   minimum percentage of free blocks %d,
1643>128      lelong              0                   TIME optimization
1644>128      lelong              1                   SPACE optimization
1645
164642332     lelong              0x19012038          Unix Fast File system [v2ea] (little-endian)
1647>40960    use                 ffsv2
1648
164942332     lelong              0x19540119          Unix Fast File system [v2] (little-endian)
1650>40960    use                 ffsv2
1651
165242332     belong              0x19012038          Unix Fast File system [v2ea] (little-endian)
1653>40960    use                 \^ffsv2
1654
165542332     belong              0x19540119          Unix Fast File system [v2] (big-endian)
1656>40960    use                 \^ffsv2
1657
165866908     lelong              0x19012038          Unix Fast File system [v2ea] (little-endian)
1659>65536    use                 ffsv2
1660
166166908     lelong              0x19540119          Unix Fast File system [v2] (little-endian)
1662>65536    use                 ffsv2
1663
166466908     belong              0x19012038          Unix Fast File system [v2ea] (little-endian)
1665>65536    use                 \^ffsv2
1666
166766908     belong              0x19540119          Unix Fast File system [v2] (big-endian)
1668>65536    use                 \^ffsv2
1669
16700         ulequad             0xc8414d4dc5523031  HAMMER filesystem (little-endian),
1671>0x90     lelong+1  x                             volume %d
1672>0x94     lelong              x                             (of %d),
1673>0x50     string              x                             name %s,
1674>0x98     ulelong             x                             version %u,
1675>0xa0     ulelong             x                             flags %#x
1676
16770         ulequad             0x48414d3205172011  HAMMER2 filesystem (little-endian),
1678>0x3b     byte                x                             volume %d,
1679>0x28     ulequad/1073741824 x                              size %lluGB,
1680>0x30     ulelong             x                             version %u,
1681>0x34     ulelong             x                             flags %#x
1682
1683# ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca>
1684# ext4 filesystem - Eric Sandeen <sandeen@sandeen.net>
1685# volume label and UUID Russell Coker
1686# https://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/
16870x438   leshort         0xEF53          Linux
1688>0x44c  lelong          x               rev %d
1689>0x43e  leshort         x               \b.%d
1690# No journal?  ext2
1691>0x45c  lelong          ^0x0000004      ext2 filesystem data
1692>>0x43a leshort         ^0x0000001      (mounted or unclean)
1693# Has a journal?  ext3 or ext4
1694>0x45c  lelong          &0x0000004
1695#  and small INCOMPAT?
1696>>0x460 lelong          <0x0000040
1697#   and small RO_COMPAT?
1698>>>0x464 lelong         <0x0000008      ext3 filesystem data
1699#   else large RO_COMPAT?
1700>>>0x464 lelong         >0x0000007      ext4 filesystem data
1701#  else large INCOMPAT?
1702>>0x460   lelong          >0x000003f      ext4 filesystem data
1703>0x468    ubelong             x                   \b, UUID=%08x
1704>0x46c    ubeshort  x                   \b-%04x
1705>0x46e    ubeshort  x                   \b-%04x
1706>0x470    ubeshort  x                   \b-%04x
1707>0x472    ubelong             x                   \b-%08x
1708>0x476    ubeshort  x                   \b%04x
1709>0x478    string              >0                  \b, volume name "%s"
1710# General flags for any ext* fs
1711>0x460    lelong          &0x0000004      (needs journal recovery)
1712>0x43a    leshort         &0x0000002      (errors)
1713# INCOMPAT flags
1714>0x460    lelong          &0x0000001      (compressed)
1715#>0x460   lelong          &0x0000002      (filetype)
1716#>0x460   lelong          &0x0000010      (meta bg)
1717>0x460    lelong          &0x0000040      (extents)
1718>0x460    lelong          &0x0000080      (64bit)
1719#>0x460   lelong          &0x0000100      (mmp)
1720#>0x460   lelong          &0x0000200      (flex bg)
1721# RO_INCOMPAT flags
1722#>0x464   lelong          &0x0000001      (sparse super)
1723>0x464    lelong          &0x0000002      (large files)
1724>0x464    lelong          &0x0000008      (huge files)
1725#>0x464   lelong          &0x0000010      (gdt checksum)
1726#>0x464   lelong          &0x0000020      (many subdirs)
1727#>0x463   lelong          &0x0000040      (extra isize)
1728
1729# f2fs filesystem - Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
17300x400     lelong              0xF2F52010          F2FS filesystem
1731>0x46c    ubelong             x                   \b, UUID=%08x
1732>0x470    ubeshort  x                   \b-%04x
1733>0x472    ubeshort  x                   \b-%04x
1734>0x474    ubeshort  x                   \b-%04x
1735>0x476    ubelong             x                   \b-%08x
1736>0x47a    ubeshort  x                   \b%04x
1737>0x147c   lestring16          x                   \b, volume name "%s"
1738
1739# Minix filesystems - Juan Cespedes <cespedes@debian.org>
17400x410     leshort             0x137f
1741!:strength / 2
1742>0x402    beshort             < 100
1743>0x402    beshort             > -1                Minix filesystem, V1, 14 char names, %d zones
1744>0x1e     string              minix               \b, bootable
17450x410     beshort             0x137f
1746!:strength / 2
1747>0x402    beshort             < 100
1748>0x402    beshort             > -1                Minix filesystem, V1 (big endian), %d zones
1749>0x1e     string              minix               \b, bootable
17500x410     leshort             0x138f
1751!:strength / 2
1752>0x402    beshort             < 100
1753>0x402    beshort             > -1                Minix filesystem, V1, 30 char names, %d zones
1754>0x1e     string              minix               \b, bootable
17550x410     beshort             0x138f
1756!:strength / 2
1757>0x402    beshort             < 100
1758>0x402    beshort             > -1                Minix filesystem, V1, 30 char names (big endian), %d zones
1759>0x1e     string              minix               \b, bootable
1760# Weak Magic: this is $x
1761#0x410    leshort             0x2468
1762#>0x402   beshort             < 100
1763#>>0x402  beshort             > -1                Minix filesystem, V2, 14 char names
1764#>0x1e    string              minix               \b, bootable
1765#0x410    beshort             0x2468
1766#>0x402   beshort             < 100
1767#>0x402   beshort             > -1                Minix filesystem, V2 (big endian)
1768#>0x1e    string              minix               \b, bootable
1769#0x410    leshort             0x2478
1770#>0x402   beshort             < 100
1771#>0x402   beshort             > -1                Minix filesystem, V2, 30 char names
1772#>0x1e    string              minix               \b, bootable
1773#0x410    leshort             0x2478
1774#>0x402   beshort             < 100
1775#>0x402   beshort             > -1                Minix filesystem, V2, 30 char names
1776#>0x1e    string              minix               \b, bootable
1777#0x410    beshort             0x2478
1778#>0x402   beshort             !0                  Minix filesystem, V2, 30 char names (big endian)
1779#>0x1e    string              minix               \b, bootable
1780# Weak Magic! this is MD
1781#0x418    leshort             0x4d5a
1782#>0x402   beshort             <100
1783#>>0x402  beshort             > -1                Minix filesystem, V3, 60 char names
1784
1785# SGI disk labels - Nathan Scott <nathans@debian.org>
17860         belong              0x0BE5A941          SGI disk label (volume header)
1787
1788# SGI XFS filesystem - Nathan Scott <nathans@debian.org>
17890         belong              0x58465342          SGI XFS filesystem data
1790>0x4      belong              x                   (blksz %d,
1791>0x68     beshort             x                   inosz %d,
1792>0x64     beshort             ^0x2004             v1 dirs)
1793>0x64     beshort             &0x2004             v2 dirs)
1794
1795############################################################################
1796# Minix-ST kernel floppy
17970x800     belong              0x46fc2700          Atari-ST Minix kernel image
1798# https://en.wikipedia.org/wiki/BIOS_parameter_block
1799# floppies with valid BPB and any instruction at beginning
1800>19       string              \240\005\371\005\0\011\0\2\0  \b, 720k floppy
1801>19       string              \320\002\370\005\0\011\0\1\0  \b, 360k floppy
1802
1803############################################################################
1804# Hmmm, is this a better way of detecting _standard_ floppy images ?
180519        string              \320\002\360\003\0\011\0\1\0  DOS floppy 360k
1806>0x1FE    leshort             0xAA55              \b, DOS/MBR hard disk boot sector
180719        string              \240\005\371\003\0\011\0\2\0  DOS floppy 720k
1808>0x1FE    leshort             0xAA55              \b, DOS/MBR hard disk boot sector
180919        string              \100\013\360\011\0\022\0\2\0  DOS floppy 1440k
1810>0x1FE    leshort             0xAA55              \b, DOS/MBR hard disk boot sector
1811
181219        string              \240\005\371\005\0\011\0\2\0  DOS floppy 720k, IBM
1813>0x1FE    leshort             0xAA55              \b, DOS/MBR hard disk boot sector
181419        string              \100\013\371\005\0\011\0\2\0  DOS floppy 1440k, mkdosfs
1815>0x1FE    leshort             0xAA55              \b, DOS/MBR hard disk boot sector
1816
181719        string              \320\002\370\005\0\011\0\1\0  Atari-ST floppy 360k
181819        string              \240\005\371\005\0\011\0\2\0  Atari-ST floppy 720k
1819#                             |       |   |     |     |
1820#                             |       |   |     |     heads
1821#                             |       |   |     sectors/track
1822#                             |       |   sectors/FAT
1823#                             |       media descriptor
1824#                   BPB:      sectors
1825
1826#  Valid media descriptor bytes for MS-DOS:
1827#
1828#     Byte   Capacity   Media Size and Type
1829#     -------------------------------------------------
1830#
1831#     F0     2.88 MB    3.5-inch, 2-sided, 36-sector
1832#     F0     1.44 MB    3.5-inch, 2-sided, 18-sector
1833#     F9     720K       3.5-inch, 2-sided, 9-sector
1834#     F9     1.2 MB     5.25-inch, 2-sided, 15-sector
1835#     FD     360K       5.25-inch, 2-sided, 9-sector
1836#     FF     320K       5.25-inch, 2-sided, 8-sector
1837#     FC     180K       5.25-inch, 1-sided, 9-sector
1838#     FE     160K       5.25-inch, 1-sided, 8-sector
1839#     FE     250K       8-inch, 1-sided, single-density
1840#     FD     500K       8-inch, 2-sided, single-density
1841#     FE     1.2 MB     8-inch, 2-sided, double-density
1842#     F8     -----      Fixed disk
1843#
1844#     FC     xxxK       Apricot 70x1x9 boot disk.
1845#
1846# Originally a bitmap:
1847#  xxxxxxx0         Not two sided
1848#  xxxxxxx1         Double sided
1849#  xxxxxx0x         Not 8 SPT
1850#  xxxxxx1x         8 SPT
1851#  xxxxx0xx         Not Removable drive
1852#  xxxxx1xx         Removable drive
1853#  11111xxx         Must be one.
1854#
1855# But now it's rather random:
1856#  111111xx         Low density disk
1857#        00         SS, Not 8 SPT
1858#        01         DS, Not 8 SPT
1859#        10         SS, 8 SPT
1860#        11         DS, 8 SPT
1861#
1862#  11111001         Double density 3 1/2 floppy disk, high density 5 1/4
1863#  11110000         High density 3 1/2 floppy disk
1864#  11111000         Hard disk any format
1865#
1866
1867# all FAT12 (strength=70) floppies with sectorsize 512 added by Joerg Jenderek at Jun 2013
1868# https://en.wikipedia.org/wiki/File_Allocation_Table#Exceptions
1869# Too Weak.
1870#512                ubelong&0xE0ffff00  0xE0ffff00
1871# without valid Media descriptor in place of BPB, cases with are done at other places
1872#>21                ubyte                         <0xE5                         floppy with old FAT filesystem
1873# but valid Media descriptor at begin of FAT
1874#>>512              ubyte                         =0xed                         720k
1875#>>512              ubyte                         =0xf0                         1440k
1876#>>512              ubyte                         =0xf8                         720k
1877#>>512              ubyte                         =0xf9                         1220k
1878#>>512              ubyte                         =0xfa                         320k
1879#>>512              ubyte                         =0xfb                         640k
1880#>>512              ubyte                         =0xfc                         180k
1881# look like an old DOS directory entry
1882#>>>0xA0E ubequad                       0
1883#>>>>0xA00          ubequad                       !0
1884#!:mime application/x-ima
1885#>>512              ubyte                         =0xfd
1886# look for 2nd FAT at different location to distinguish between 360k and 500k
1887#>>>0x600 ubelong&0xE0ffff00  0xE0ffff00                    360k
1888#>>>0x500 ubelong&0xE0ffff00  0xE0ffff00                    500k
1889#>>>0xA0E ubequad                       0
1890#!:mime application/x-ima
1891#>>512              ubyte                         =0xfe
1892#>>>0x400 ubelong&0xE0ffff00  0xE0ffff00                    160k
1893#>>>>0x60E          ubequad                       0
1894#>>>>>0x600         ubequad                       !0
1895#!:mime application/x-ima
1896#>>>0xC00 ubelong&0xE0ffff00  0xE0ffff00                    1200k
1897#>>512              ubyte                         =0xff                         320k
1898#>>>0x60E ubequad                       0
1899#>>>>0x600          ubequad                       !0
1900#!:mime application/x-ima
1901#>>512              ubyte                         x                             \b, Media descriptor %#x
1902# without x86 jump instruction
1903#>>0                ulelong&0x804000E9  !0x000000E9
1904# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV
1905#>>>0     ubequad                                 0xfabce701b8c0078e  \b, MS-DOS 1.12 bootloader
1906# IOSYS.COM+MSDOS.COM
1907#>>>>0xc4 use                           2xDOS-filename
1908#>>0                ulelong&0x804000E9  =0x000000E9
1909# only x86 short jump instruction found
1910#>>>0               ubyte                         =0xEB
1911#>>>>1              ubyte                         x                             \b, code offset %#x+2
1912# https://thestarman.pcministry.com/DOS/ibm100/Boot.htm
1913# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0
1914#>>>>(1.b+2)        ubequad                       0xfa8cc88ed8ba0000  \b, PC-DOS 1.0 bootloader
1915# ibmbio.com+ibmdos.com
1916#>>>>>0x176         use                           DOS-filename
1917#>>>>>0x181         ubyte                         x                             \b+
1918#>>>>>0x182         use                           DOS-filename
1919# https://thestarman.pcministry.com/DOS/ibm110/Boot.htm
1920# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;XOR DX,DX;MOV
1921#>>>>(1.b+2)        ubequad                       0xfa8cc88ed833d28e  \b, PC-DOS 1.1 bootloader
1922# ibmbio.com+ibmdos.com
1923#>>>>>0x18b         use                           DOS-filename
1924#>>>>>0x196         ubyte                         x                             \b+
1925#>>>>>0x197         use                           DOS-filename
1926# https://en.wikipedia.org/wiki/Zenith_Data_Systems
1927# assembler instructions: MOV BX,07c0;MOV SS,BX;MOV SP,01c6
1928#>>>>(1.b+2)        ubequad                       0xbbc0078ed3bcc601  \b, Zenith Data Systems MS-DOS 1.25 bootloader
1929# IO.SYS+MSDOS.SYS
1930#>>>>>0x20          use                           2xDOS-filename
1931# https://en.wikipedia.org/wiki/Corona_Data_Systems
1932# assembler instructions: MOV AX,CS;MOV DS,AX;CLI;MOV SS,AX;
1933#>>>>(1.b+2)        ubequad                       0x8cc88ed8fa8ed0bc  \b, MS-DOS 1.25 bootloader
1934# IO.SYS+MSDOS.SYS
1935#>>>>>0x69          use                           2xDOS-filename
1936# assembler instructions: CLI;PUSH CS;POP SS;MOV SP,7c00;
1937#>>>>(1.b+2)        ubequad                       0xfa0e17bc007cb860  \b, MS-DOS 2.11 bootloader
1938# defect IO.SYS+MSDOS.SYS ?
1939#>>>>>0x162         use                           2xDOS-filename
1940
19410         name                                    cdrom
1942>38913    string   !NSR0      ISO 9660 CD-ROM filesystem data
1943!:mime    application/x-iso9660-image
1944!:ext     iso/iso9660
1945>38913    string    NSR0      UDF filesystem data
1946!:mime    application/x-iso9660-image
1947!:ext     iso/udf
1948>>38917   string    1         (version 1.0)
1949>>38917   string    2         (version 1.5)
1950>>38917   string    3         (version 2.0)
1951>>38917   byte     >0x33      (unknown version, ID %#X)
1952>>38917   byte     <0x31      (unknown version, ID %#X)
1953# The next line is not necessary because the MBR staff is done looking for boot signature
1954>0x1FE    leshort  0xAA55     (DOS/MBR boot sector)
1955# "application id" which appears to be used as a volume label
1956>32808    string/T  >\0       '%.32s'
1957>34816    string    \000CD001\001EL\ TORITO\ SPECIFICATION    (bootable)
195837633     string    CD001     ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
1959!:mime    application/x-iso9660-image
196032777     string    CDROM     High Sierra CD-ROM filesystem data
1961# "application id" which appears to be used as a volume label
1962>32816    string/T  >\0       '%.32s'
1963
1964
1965# CDROM Filesystems
1966# https://en.wikipedia.org/wiki/ISO_9660
1967# Modified for UDF by gerardo.cacciari@gmail.com
196832769     string    CD001
1969# mime line at that position does not work
1970# to display CD-ROM (70=81-11) after MBR (113=40+72+1), partition-table (71=50+21) and before Apple Driver Map (51)
1971#!:strength -11
1972# to display CD-ROM (114=81+33) before MBR (113=40+72+1), partition-table (71=50+21) and Apple Driver Map (51)
1973!:strength +35
1974>0        use       cdrom
1975
1976# URL: https://en.wikipedia.org/wiki/NRG_(file_format)
1977# Reference: https://dl.opendesktop.org/api/files/download/id/1460731811/
1978#         11577-mount-iso-0.9.5.tar.bz2/mount-iso-0.9.5/install.sh
1979# From: Joerg Jenderek
1980# Note:   Only for nero disc with once (DAO) type after 300 KB header
1981339969    string    CD001     Nero CD image at 0x4B000
1982!:mime    application/x-nrg
1983!:ext     nrg
1984>307200   use cdrom
1985
1986# .cso files
1987# Reference: https://pismotec.com/ciso/ciso.h
1988# NOTE: There are two other formats with the same magic but
1989# completely incompatible specifications:
1990# - GameCube/Wii CISO: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/DiscIO/CISOBlob.h
1991# - PSP CISO: https://github.com/jamie/ciso/blob/master/ciso.h
19920    string    CISO
1993# Other fields are used to determine what type of CISO this is:
1994# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size)
1995# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size)
1996# - 0x10 == 0x00004000: For >2GB files using maxcso...
1997#                             https://github.com/unknownbrackets/maxcso/issues/26
1998# - None of the above: Compact ISO.
1999>4        lelong    !0
2000>>4       lelong    !0x200000
2001>>>16     lelong    !0x800
2002>>>>16    lelong    !0x4000             Compressed ISO CD image
2003
2004# cramfs filesystem - russell@coker.com.au
20050       lelong    0x28cd3d45      Linux Compressed ROM File System data, little endian
2006>4      lelong  x size %u
2007>8      lelong  &1 version #2
2008>8      lelong  &2 sorted_dirs
2009>8      lelong  &4 hole_support
2010>32     lelong  x CRC %#x,
2011>36     lelong  x edition %u,
2012>40     lelong  x %u blocks,
2013>44     lelong  x %u files
2014
20150       belong    0x28cd3d45      Linux Compressed ROM File System data, big endian
2016>4      belong  x size %u
2017>8      belong  &1 version #2
2018>8      belong  &2 sorted_dirs
2019>8      belong  &4 hole_support
2020>32     belong  x CRC %#x,
2021>36     belong  x edition %u,
2022>40     belong  x %u blocks,
2023>44     belong  x %u files
2024
2025# reiserfs - russell@coker.com.au
20260x10034             string    ReIsErFs  ReiserFS V3.5
20270x10034             string    ReIsEr2Fs ReiserFS V3.6
20280x10034             string    ReIsEr3Fs ReiserFS V3.6.19
2029>0x1002c  leshort   x                   block size %d
2030>0x10032  leshort   &2                  (mounted or unclean)
2031>0x10000  lelong    x                   num blocks %d
2032>0x10040  lelong    1                   tea hash
2033>0x10040  lelong    2                   yura hash
2034>0x10040  lelong    3                   r5 hash
2035
2036# EST flat binary format (which isn't, but anyway)
2037# From: Mark Brown <broonie@sirena.org.uk>
20380         string    ESTFBINR  EST flat binary
2039
2040# Aculab VoIP firmware
2041# From: Mark Brown <broonie@sirena.org.uk>
20420         string    VoIP\ Startup\ and  Aculab VoIP firmware
2043>35       string    x         format %s
2044
2045# From: Mark Brown <broonie@sirena.org.uk> [old]
2046# From: Behan Webster <behanw@websterwood.com>
20470         belong    0x27051956          u-boot legacy uImage,
2048>32       string    x                   %s,
2049>28       byte      0                   Invalid os/
2050>28       byte      1                   OpenBSD/
2051>28       byte      2                   NetBSD/
2052>28       byte      3                   FreeBSD/
2053>28       byte      4                   4.4BSD/
2054>28       byte      5                   Linux/
2055>28       byte      6                   SVR4/
2056>28       byte      7                   Esix/
2057>28       byte      8                   Solaris/
2058>28       byte      9                   Irix/
2059>28       byte      10                  SCO/
2060>28       byte      11                  Dell/
2061>28       byte      12                  NCR/
2062>28       byte      13                  LynxOS/
2063>28       byte      14                  VxWorks/
2064>28       byte      15                  pSOS/
2065>28       byte      16                  QNX/
2066>28       byte      17                  Firmware/
2067>28       byte      18                  RTEMS/
2068>28       byte      19                  ARTOS/
2069>28       byte      20                  Unity OS/
2070>28       byte      21                  INTEGRITY/
2071>29       byte      0                   \bInvalid CPU,
2072>29       byte      1                   \bAlpha,
2073>29       byte      2                   \bARM,
2074>29       byte      3                   \bIntel x86,
2075>29       byte      4                   \bIA64,
2076>29       byte      5                   \bMIPS,
2077>29       byte      6                   \bMIPS 64-bit,
2078>29       byte      7                   \bPowerPC,
2079>29       byte      8                   \bIBM S390,
2080>29       byte      9                   \bSuperH,
2081>29       byte      10                  \bSparc,
2082>29       byte      11                  \bSparc 64-bit,
2083>29       byte      12                  \bM68K,
2084>29       byte      13                  \bNios-32,
2085>29       byte      14                  \bMicroBlaze,
2086>29       byte      15                  \bNios-II,
2087>29       byte      16                  \bBlackfin,
2088>29       byte      17                  \bAVR32,
2089>29       byte      18                  \bSTMicroelectronics ST200,
2090>29       byte      19                  \bSandbox architecture,
2091>29       byte      20                  \bANDES Technology NDS32,
2092>29       byte      21                  \bOpenRISC 1000,
2093>29       byte      22                  \bARM 64-bit,
2094>29       byte      23                  \bDesignWare ARC,
2095>29       byte      24                  \bx86_64,
2096>29       byte      25                  \bXtensa,
2097>29       byte      26                  \bRISC-V,
2098>30       byte      0                   Invalid Image
2099>30       byte      1                   Standalone Program
2100>30       byte      2                   OS Kernel Image
2101>30       byte      3                   RAMDisk Image
2102>30       byte      4                   Multi-File Image
2103>30       byte      5                   Firmware Image
2104>30       byte      6                   Script File
2105>30       byte      7                   Filesystem Image (any type)
2106>30       byte      8                   Binary Flat Device Tree BLOB
2107>31       byte      0                   (Not compressed),
2108>31       byte      1                   (gzip),
2109>31       byte      2                   (bzip2),
2110>31       byte      3                   (lzma),
2111>12       belong    x                   %d bytes,
2112>8        bedate    x                   %s,
2113>16       belong    x                   Load Address: %#08X,
2114>20       belong    x                   Entry Point: %#08X,
2115>4        belong    x                   Header CRC: %#08X,
2116>24       belong    x                   Data CRC: %#08X
2117
2118# JFFS2 file system
21190         leshort   0x1984              Linux old jffs2 filesystem data little endian
21200         beshort   0x1984              Linux old jffs2 filesystem data big endian
21210         leshort   0x1985              Linux jffs2 filesystem data little endian
21220         beshort   0x1985              Linux jffs2 filesystem data big endian
2123
2124# Squashfs
21250         name      squashfs
2126>28       beshort   x         version %d.
2127>30       beshort   x         \b%d,
2128>20       beshort 0 uncompressed,
2129>20       beshort 1 zlib
2130>20       beshort 2 lzma
2131>20       beshort 3 lzo
2132>20       beshort 4 xz
2133>20       beshort 5 lz4
2134>20       beshort 6 zstd
2135>20       beshort >0          compressed,
2136>28       beshort <3
2137>>8       belong    x         %d bytes,
2138>28       beshort >2
2139>>28      beshort <4
2140>>>63     bequad x  %lld bytes,
2141>>28      beshort >3
2142>>>40     bequad x  %lld bytes,
2143#>>67     belong    x         %d bytes,
2144>4        belong    x         %d inodes,
2145>28       beshort <2
2146>>32      beshort   x         blocksize: %d bytes,
2147>28       beshort >1
2148>>28      beshort <4
2149>>>51     belong    x         blocksize: %d bytes,
2150>>28      beshort >3
2151>>>12     belong    x         blocksize: %d bytes,
2152>28       beshort <4
2153>>39      bedate    x         created: %s
2154>28       beshort >3
2155>>8       bedate    x         created: %s
2156
21570         string    sqsh      Squashfs filesystem, big endian,
2158>0        use       squashfs
2159
21600         string    hsqs      Squashfs filesystem, little endian,
2161>0        use       \^squashfs
2162
2163# AFS Dump Magic
2164# From: Ty Sarna <tsarna@sarna.org>
21650       string                  \x01\xb3\xa1\x13\x22    AFS Dump
2166>&0     belong                  x                       (v%d)
2167>>&0    byte                    0x76
2168>>>&0   belong                  x                       Vol %d,
2169>>>>&0  byte                    0x6e
2170>>>>>&0 string                  x                       %s
2171>>>>>>&1        byte            0x74
2172>>>>>>>&0       beshort         2
2173>>>>>>>>&4      bedate          x                       on: %s
2174>>>>>>>>&0      bedate          =0                      full dump
2175>>>>>>>>&0      bedate          !0                      incremental since: %s
2176
2177#----------------------------------------------------------
2178#delta ISO    Daniel Novotny (dnovotny@redhat.com)
21790         string  DISO        Delta ISO data
2180!:strength +50
2181>4        belong  x version %d
2182
2183# VMS backup savesets - gerardo.cacciari@gmail.com
2184#
21854            string  \x01\x00\x01\x00\x01\x00
2186>(0.s+16)    string  \x01\x01
2187>>&(&0.b+8)  byte    0x42       OpenVMS backup saveset data
2188>>>40        lelong  x          (block size %d,
2189>>>49        string  >\0        original name '%s',
2190>>>2         short   1024       VAX generated)
2191>>>2         short   2048       AXP generated)
2192>>>2         short   4096       I64 generated)
2193
2194# Summary: Oracle Clustered Filesystem
2195# Created by: Aaron Botsis <redhat@digitalmafia.org>
21968         string              OracleCFS Oracle Clustered Filesystem,
2197>4        long                x                   rev %d
2198>0        long                x                   \b.%d,
2199>560      string              x                   label: %.64s,
2200>136      string              x                   mountpoint: %.128s
2201
2202# Summary: Oracle ASM tagged volume
2203# Created by: Aaron Botsis <redhat@digitalmafia.org>
220432        string              ORCLDISK  Oracle ASM Volume,
2205>40       string              x                   Disk Name: %0.12s
220632        string              ORCLCLRD  Oracle ASM Volume (cleared),
2207>40       string              x                   Disk Name: %0.12s
2208
2209# Oracle Clustered Filesystem - Aaron Botsis <redhat@digitalmafia.org>
22108         string              OracleCFS Oracle Clustered Filesystem,
2211>4        long                x                   rev %d
2212>0        long                x                   \b.%d,
2213>560      string              x                   label: %.64s,
2214>136      string              x                   mountpoint: %.128s
2215
2216# Oracle ASM tagged volume - Aaron Botsis <redhat@digitalmafia.org>
221732        string              ORCLDISK  Oracle ASM Volume,
2218>40       string              x                   Disk Name: %0.12s
221932        string              ORCLCLRD  Oracle ASM Volume (cleared),
2220>40       string              x                   Disk Name: %0.12s
2221
2222# Compaq/HP RILOE floppy image
2223# From: Dirk Jagdmann <doj@cubic.org>
22240         string    CPQRFBLO  Compaq/HP RILOE floppy image
2225
2226#------------------------------------------------------------------------------
2227# Files-11 On-Disk Structure (File system for various RSX-11 and VMS flavours).
2228# These bits come from LBN 1 (home block) of ODS-1, ODS-2 and ODS-5 volumes,
2229# which is mapped to VBN 2 of [000000]INDEXF.SYS;1 - gerardo.cacciari@gmail.com
2230#
22311008    string          DECFILE11       Files-11 On-Disk Structure
2232>525    byte            x               (ODS-%d);
2233>1017   string          A               RSX-11, VAX/VMS or OpenVMS VAX file system;
2234>1017   string          B
2235>>525   byte            2               VAX/VMS or OpenVMS file system;
2236>>525   byte            5               OpenVMS Alpha or Itanium file system;
2237>984    string          x               volume label is '%-12.12s'
2238
2239# From: Thomas Klausner <wiz@NetBSD.org>
2240# https://filext.com/file-extension/DAA
2241# describes the daa file format. The magic would be:
22420         string              DAA\x0\x0\x0\x0\x0  PowerISO Direct-Access-Archive
2243
2244# From Albert Cahalan <acahalan@gmail.com>
2245# really le32 operation,destination,payloadsize (but quite predictable)
2246# 01 00 00 00 00 00 00 c0 00 02 00 00
22470         string              \1\0\0\0\0\0\0\300\0\2\0\0    Marvell Libertas firmware
2248
2249# From Eric Sandeen
2250# GFS2
22510x10000         belong          0x01161970
2252>0x10018        belong          0x0000051d      GFS1 Filesystem
2253>>0x10024        belong          x               (blocksize %d,
2254>>0x10060        string          >\0             lockproto %s)
2255>0x10018        belong          0x00000709      GFS2 Filesystem
2256>>0x10024        belong          x               (blocksize %d,
2257>>0x10060        string          >\0             lockproto %s)
2258
2259# Russell Coker <russell@coker.com.au>
22600x10040             string              _BHRfS_M  BTRFS Filesystem
2261>0x1012b  string              >\0                 label "%s",
2262>0x10090  lelong              x                   sectorsize %d,
2263>0x10094  lelong              x                   nodesize %d,
2264>0x10098  lelong              x                   leafsize %d,
2265>0x10020  ubelong             x                   UUID=%08x-
2266>0x10024  ubeshort  x                   \b%04x-
2267>0x10026  ubeshort  x                   \b%04x-
2268>0x10028  ubeshort  x                   \b%04x-
2269>0x1002a  ubeshort  x                   \b%04x
2270>0x1002c  ubelong             x                   \b%08x,
2271>0x10078  lequad              x                   %lld/
2272>0x10070  lequad              x                   \b%lld bytes used,
2273>0x10088  lequad              x                   %lld devices
2274
22750                   string              btrfs-stream        BTRFS stream file
2276
2277# dvdisaster's .ecc
2278# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
22790         string    *dvdisaster*        dvdisaster error correction file
2280
2281# xfs metadump image
2282# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
2283# but can we do the << ?  For now it's always 512 (0x200) anyway.
22840         string XFSM
2285>0x200    string XFSB         XFS filesystem metadump image
2286
2287# Type:   CROM filesystem
2288# From:   Werner Fink <werner@suse.de>
22890         string    CROMFS    CROMFS
2290>6        string    >\0       \b version %2.2s,
2291>8        ulequad   >0        \b block data at %lld,
2292>16       ulequad   >0        \b fblock table at %lld,
2293>24       ulequad   >0        \b inode table at %lld,
2294>32       ulequad   >0        \b root at %lld,
2295>40       ulelong   >0        \b fblock size = %d,
2296>44       ulelong   >0        \b block size = %d,
2297>48       ulequad   >0        \b bytes = %lld
2298
2299# Type:   xfs metadump image
2300# From:   Daniel Novotny <dnovotny@redhat.com>
2301# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
2302# but can we do the << ? For now it's always 512 (0x200) anyway.
23030         string    XFSM
2304>0x200    string    XFSB      XFS filesystem metadump image
2305
2306# Type:   delta ISO
2307# From:   Daniel Novotny <dnovotny@redhat.com>
23080         string    DISO      Delta ISO data,
2309>4        belong    x         version %d
2310
2311# JFS2 (Journaling File System) image. (Old JFS1 has superblock at 0x1000.)
2312# See linux/fs/jfs/jfs_superblock.h for layout; see jfs_filsys.h for flags.
2313# From: Adam Buchbinder <adam.buchbinder@gmail.com>
23140x8000    string    JFS1
2315# Because it's text-only magic, check a binary value (version) to be sure.
2316# Should always be 2, but mkfs.jfs writes it as 1. Needs to be 2 or 1 to be
2317# mountable.
2318>&0       lelong    <3        JFS2 filesystem image
2319# Label is followed by a UUID; we have to limit string length to avoid
2320# appending the UUID in the case of a 16-byte label.
2321>>&144    regex     [\x20-\x7E]{1,16}   (label "%s")
2322>>&0      lequad    x         \b, %lld blocks
2323>>&8      lelong    x         \b, blocksize %d
2324>>&32     lelong&0x00000006   >0        (dirty)
2325>>&36     lelong    >0        (compressed)
2326
2327# LFS
23280         lelong    0x070162  LFS filesystem image
2329>4        lelong    1                   version 1,
2330>>8       lelong    x                   \b blocks %u,
2331>>12      lelong    x                   \b blocks per segment %u,
2332>4        lelong    2                   version 2,
2333>>8       lelong    x                   \b fragments %u,
2334>>12      lelong    x                   \b bytes per segment %u,
2335>16       lelong    x                   \b disk blocks %u,
2336>20       lelong    x                   \b block size %u,
2337>24       lelong    x                   \b fragment size %u,
2338>28       lelong    x                   \b fragments per block %u,
2339>32       lelong    x                   \b start for free list %u,
2340>36       lelong    x                   \b number of free blocks %d,
2341>40       lelong    x                   \b number of files %u,
2342>44       lelong    x                   \b blocks available for writing %d,
2343>48       lelong    x                   \b inodes in cache %d,
2344>52       lelong    x                   \b inode file disk address %#x,
2345>56       lelong    x                   \b inode file inode number %u,
2346>60       lelong    x                   \b address of last segment written %#x,
2347>64       lelong    x                   \b address of next segment to write %#x,
2348>68       lelong    x                   \b address of current segment written %#x
2349
23500         string    td\000              floppy image data (TeleDisk, compressed)
23510         string    TD\000              floppy image data (TeleDisk)
2352
23530         string    CQ\024              floppy image data (CopyQM,
2354>16       leshort   x                   %d sectors,
2355>18       leshort   x                   %d heads.)
2356
23570         string    ACT\020Apricot\020disk\020image\032\004 floppy image data (ApriDisk)
2358
2359# URL:              http://fileformats.archiveteam.org/wiki/LoadDskF/SaveDskF
2360# Update: Joerg Jenderek
2361# Note:             called "IBM SKF disk image" by TrID
2362#                   verfied by 7-Zip `7z l -tFAT -slt *.dsk` and
2363#                   `deark -l -m loaddskf  06200D19.DSK`
2364# Reference:        http://mark0.net/download/triddefs_xml.7z/defs/d/dsk-skf-old.trid.xml
23650         beshort   0xAA58
2366>0        use                 SaveDskF
2367# Reference:        http://mark0.net/download/triddefs_xml.7z/defs/d/dsk-skf.trid.xml
23680         beshort   0xAA59
2369>0        use                 SaveDskF
2370# Reference:        http://mark0.net/download/triddefs_xml.7z/defs/d/dsk-skf-comp.trid.xml
23710         beshort   0xAA5A
2372# skip foo by additional check for unused upper byte of media type in SaveDskF header
2373#>3       ubyte               =0
2374# skip bar by additional check for valid "low" number of heads in SaveDskF header
2375#>>26     uleshort  <3
2376# skip foo by additional check for unused double word field in SaveDskF header
2377#>>>30    long                =0
2378#>>>>0    use                 SaveDskF
2379>0        use                 SaveDskF
2380# display information about IBM SaveDskF floppy disk images
23810         name                          SaveDskF
2382# SaveDskF magic
2383>0        beshort   x                   floppy image data (IBM SaveDskF
2384#!:mime   application/octet-stream
2385!:mime    application/x-ibm-dsk
2386!:ext     dsk
2387# also suffix with digit (1dk .2dk ...); NO example FOUND!
2388#!:ext    dsk/1dk/2dk
2389>1        ubyte               =0x58     \b, old)
2390>1        ubyte               =0x59     \b)
2391>1        ubyte               =0x5A     \b, compressed)
2392# media type; the first byte of the FAT like: 0xF0 (usual floppy) 0xF9 0xFE
2393# https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system
2394>2        ubyte               !0xF0     \b, Media descriptor %#x
2395# upper byte of media type is not used; so this seems to be nil
2396>3        ubyte               !0        \b, upper byte of media type %#x
2397# sector size in bytes as in the BIOS parameter block like: 512 ; SAVEDSKF.EXE with other sizes produce garbage images
2398>4        uleshort  !512      \b, Bytes/sector %u
2399# cluster mask; number of sectors per cluster, minus 1
2400>6        uleshort+1          >1        \b, sectors/cluster %u
2401#>6       uleshort+1          x         \b, sectors/cluster %u
2402# cluster shift; log2(cluster size / sector size) like: 0~1=ClusterSize/SectorSize
2403>7        ubyte               >0        \b, cluster shift %u
2404#>7       ubyte               x         \b, cluster shift %u
2405# reserved sectors; as in the BIOS parameter block like: 1 256 (2M256R-K.DSK)
2406>8        uleshort  >1        \b, reserved sectors %u
2407#>8       uleshort  x         \b, reserved sectors %u
2408# FAT copies; as in the BIOS parameter block like: 2 (usual) 1 (2-NK.DSK)
2409>10       ubyte               !2        \b, FAT
2410# plural s
2411>>10      ubyte               >1        \bs
2412>>10      ubyte               x         %u
2413# root directory entries; as in the BIOS parameter block like: 224 (usual) 64 (H1-NK.DSK) 4096 (2-NK.DSK)
2414>11       uleshort  !224      \b, root entries %u
2415# sector number of first cluster (count sectors used by boot sector, FATs and root directory) like: 7 10 29 33 288
2416>13       uleshort  !33       \b, 1st cluster at sector %u
2417# number of clusters in image; empty clusters at the end are not saved and counted like: 2372 2848
2418>15       uleshort  x         \b, %u clusters
2419# sectors/FAT; as in the BIOS parameter block like: 1 (H1-NK.DSK) 7 9
2420>17       ubyte               !9        \b, sectors/FAT %u
2421# sector number of root directory (ie, count of sectors used by boot sector and FATs) like: 3 (H1-NK.DSK) 9 10 15 19 274 (2M256R-K.DSK)
2422>18       uleshort  !19       \b, root directory at sector %u
2423# checksum; sum of all bytes in the file
2424>20       ulelong             x         \b, checksum %#8.8x
2425# cylinders; number of cylinders like: 40 80
2426>24       uleshort  !80       \b, %u cylinders
2427#>24      uleshort  x         \b, %u cylinders
2428# heads; number of heads as in the BIOS parameter block like: 1 (H1-NK.DSK) 2
2429>26       uleshort  !2        \b, heads %u
2430#>26      uleshort  x         \b, heads %u
2431# sectors/track; number of sectors per track as in the BIOS parameter block like: 8 15 18 36
2432>28       uleshort  !18       \b, sectors/track %u
2433#>28      uleshort  x         \b, sectors/track %u
2434# unused double word field seems to be always like: 0
2435>30       ulelong             !0        \b, at 0x1E %#x
2436# number of sectors in images like: 1017 2786 2880
2437>34       uleshort  x         \b, sectors %u
2438# if string is "printable" it can be a real comment
2439>(36.s)   ubyte               !0x00
2440# if 1st sector is far enough away (> 0x29) then there is space for comment part
2441>>38      uleshort  >41
2442# offset to comment string like: 28h=40
2443>>>36     uleshort  x         \b, at %#x
2444# comment string terminated with \r\n\0
2445>>>(36.s) string    x         "%s"
2446# offset to the first sector like: 0 (If this is 0, assume it is 0x200) 29h=41 (DISPLAY3.DSK) 31h 43h 45h 46h 48h 50h 200h=512
2447>38       uleshort  !0        \b, 1st sector at %#x
2448# FOR DEBUGGING!
2449#>(38.s)  ubelong             x         SECTOR CONTENT %x
2450# not compressed floppy image implies readable DOS boot sector inside image
2451>>1                 ubyte     !0x5A
2452# when not compressed it is readable as DOS boot sector via ./filesystems
2453#>>>(38.s)          indirect x          \b; contains
2454>38       uleshort  =0        \b, 1st sector at 0x200 (0)
2455# maybe standard DOS boot sector; NO example FOUND HERE!
2456#>>0x200  indirect  x         \b; contains
2457
24580         string    \074CPM_Disk\076    disk image data (YAZE)
2459
2460# From:   Joerg Jenderek
2461# URL:              https://en.wikipedia.org/wiki/Central_Point_Software#cite_note-6
2462# Reference:        https://www.robcraig.com/download/transcopy-5-x-file-format
2463#                   https://www.robcraig.com/download/transcopy-file-format-by-gene-thompson
2464#                   http://mark0.net/download/triddefs_xml.7z/defs/t/tc-transcopy.trid.xml
2465# TransCopy signature
24660                   beshort             0x5AA5
2467# skip Intel serial flash ROM with invalid 0 disk sides handled by ./intel
2468>0x103              ubyte               !0
2469# skip Intel serial flash ROM with unlikely "high" start cylinder 100 handled by ./intel
2470#>>0x101            ubyte               <100                VALID_START_CYLINDER
2471# skip Intel serial flash ROM with unlikely description handled by ./intel
2472#>>>2               beshort             !0xF00f             VALID_DESCRIPTION
2473# skip Intel serial flash ROM with invalid disk types 89h 88h handled by ./intel
2474#>>>>0x100          byte                !0x89               VALID_DISK_TYPE
2475>>0       use       tc-floppy
2476#         display information of Central Point Software (CPS) Option Board TransCopy floppy image
24770         name                tc-floppy
2478>0                  beshort             x                   TransCopy disk image
2479#!:mime   application/octet-stream
2480!:mime    application/x-floppy-image-tc
2481# like: disk04.tc VOCALC2.TC WIZ5_A.tc WIZ2_720.IMG
2482!:ext     tc/img
2483# 1st description (optional 0-terminated maximal 32) like:
2484# "Project Workbench 2.20" "Visi On Calc" "Wizardry V Disk 1 of 3"
2485>2                  string              >\0                 %.32s
2486# 2nd desc. (optional 0-terminated maximal 32) like:
2487# "(1988)." "Advanced - Utility" 'Program Disk 2"
2488>0x22               string              >\0                 "%.32s"
2489# Looks like ascii (like MESSAGES) formatted with attribute bytes (190)?
2490# not needed for disk copy
2491#>>0x42             string              x                   '%.190s'
2492#>>0x88             lestring16          x                   "%.8s"
2493# disktype: 2~MFM High Density 3~MFM Double Density 4~Apple II GCR 5~FM Single Density
2494# 6~Commodore GCR 7~MFM Double Density 8~Commodore Amiga Ch~Atari FM FFh~Unknown
2495>0x100              ubyte               !0xFF               \b, disk type %u
2496# StartingCylinder like: 0
2497>0x101              ubyte               x                   \b, cylinder
2498>0x101              ubyte               !0                  start=%u
2499# EndingCylinder like: 40 (often) 41 79
2500>0x102              ubyte               x                   end=%u
2501# NumberOfSides like: 2
2502>0x103              ubyte               !2                  \b, %u sides
2503# TrackIncrement like: 1
2504>0x104              ubyte               !1                  \b, track increment %u
2505# TrackPosTbl Track skew
2506#>0x105             ubequad             x                   \b, Track skew %#16.16llx
2507# TrackOffsTbl
2508#>0x305             ubequad             x                   \b, TrackOffsTbl %#16.16llx
2509# TrackLngthTbl
2510#>0x505             ubequad             x                   \b, TrackLngthTbl %#16.16llx
2511# TrackTypeTable
2512#>0x705             ubequad             x                   \b, TrackTypeTable %#16.16llx
2513# Address mark timing
2514#>0x905             ubequad             x                   \b, Address mark timing %#16.16llx
2515# Track fragment
2516#>0x2905 ubequad                        !0                  \b, Track fragment %#16.16llx
2517# Track data
2518#>0x4000            ubequad             !0                  \b, Track data %#16.16llx
2519
2520# ReFS
2521# Richard W.M. Jones <rjones@redhat.com>
25220         string    \0\0\0ReFS\0        ReFS filesystem image
2523
2524# EFW encase image file format:
2525# Gregoire Passault
2526# http://www.forensicswiki.org/wiki/Encase_image_file_format
25270         string    EVF\x09\x0d\x0a\xff\x00       EWF/Expert Witness/EnCase image file format
2528
2529# UBIfs
2530# Linux kernel sources: fs/ubifs/ubifs-media.h
25310         lelong    0x06101831
2532>0x16     leshort   0                   UBIfs image
2533>0x08     lequad    x                   \b, sequence number %llu
2534>0x10     leshort x           \b, length %u
2535>0x04     lelong    x                   \b, CRC %#08x
2536
25370         lelong    0x23494255
2538>0x04     leshort   <2
2539>0x05     string    \0\0\0
2540>0x1c     string    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
2541>0x04     leshort   x                   UBI image, version %u
2542
2543# NEC PC-88 2D disk image
2544# From Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>
25450x20                ulelong&0xFFFFFEFF  0x2A0
2546>0x10               string                        \0\0\0\0\0\0\0\0\0\0
2547>>0x280             string                        \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
2548>>>0x1A             ubyte&0xEF                    0
2549>>>>0x1B  ubyte&0x8F                    0
2550>>>>>0x1B ubyte&70            <0x40
2551>>>>>>0x1C          ulelong                       >0x21
2552>>>>>>>0  regex     [[:print:]]*        NEC PC-88 disk image, name=%s
2553>>>>>>>>0x1B        ubyte     0                   \b, media=2D
2554>>>>>>>>0x1B        ubyte     0x10                \b, media=2DD
2555>>>>>>>>0x1B        ubyte     0x20                \b, media=2HD
2556>>>>>>>>0x1B        ubyte     0x30                \b, media=1D
2557>>>>>>>>0x1B        ubyte     0x40                \b, media=1DD
2558>>>>>>>>0x1A        ubyte     0x10                \b, write-protected
2559
2560# HDD Raw Copy Tool disk image, file extension: .imgc
2561# From Benjamin Vanheuverzwijn <bvanheu@gmail.com>
25620         pstring   HDD\ Raw\ Copy\ Tool          %s
2563>0x100    pstring   x                             %s
2564>0x200    pstring   x                             - HD model: %s
2565#>0x300   pstring   x                             unknown %s
2566>0x400    pstring   x                             serial: %s
2567#>0x500   pstring   x                             unknown: %s
2568!:ext     imgc
2569
2570# http://martin.hinner.info/fs/bfs/bfs-structure.html
25710         lelong    0x1BADFACE                    SCO UnixWare BFS filesystem
2572
2573# https://arstechnica.com/information-technology/2018/07/the-beos-filesystem/
257432        lelong    0x42465331                    BE/OS BFS1 filesystem
2575>36       lelong    x                             \b, byte order %d
2576>40       lelong    x                             \b, block size %d
2577>44       lelong    x                             \b, block shift %d
2578>48       lequad    x                             \b, total blocks %lld
2579>56       lequad    x                             \b, used blocks %lld
2580
2581
25820         name next
2583>0        lelong    x                             \b, size %d
2584>4        string    x                             \b, label %s
2585
2586# https://opensource.apple.com/source/IOStorageFamily/IOStorageFamily-44.3\
2587# /IONeXTPartitionScheme.h
25880         string    NeXT                          NeXT version 1 disklabel
2589>12       use next
25900         string    dlV1                          NeXT version 2 disklabel
2591>12       use next
25920         string    dlV2                          NeXT version 3 disklabel
2593>12       use next
2594
2595# bcachefs
2596# From: Thomas Wei�schuh <thomas@t-8ch.de>
2597
25980         name      bcachefs-uuid
2599>0        ubelong             x         \b%08x
2600>4        ubeshort  x         \b-%04x
2601>6        ubeshort  x         \b-%04x
2602>8        ubeshort  x         \b-%04x
2603>10       ubelong             x         \b-%08x
2604>14       ubeshort  x         \b%04x
2605
26060         name      bcachefs  bcachefs
2607>0x68     lequad              8         \b, UUID=
2608>>0x38    use                 bcachefs-uuid
2609>>0x48    string              >0        \b, label "%.32s"
2610>>0x10    uleshort  x         \b, version %u
2611>>0x12    uleshort  x         \b, min version %u
2612>>0x7a    byte                x         \b, device %d
2613# assumes the first field is the members field
2614>>0x2f4   ulelong             0x01      \b/UUID=
2615>>>0x2f0  default             x
2616>>>&(0x07a.b*56)    use       bcachefs-uuid
2617>>0x07b   byte                x         \b, %d devices
2618>>0x090   byte                ^0x02     \b (unclean)
2619
26200x1018              string              \xc6\x85\x73\xf6\x4e\x1a\x45\xca\x82\x65\xf5\x7f\x48\xba\x6d\x81
2621>0x1000             use                 bcachefs
2622
26230x1018          string          \xc6\x85\x73\xf6\x66\xce\x90\xa9\xd9\x6a\x60\xcf\x80\x3d\xf7\xef
2624>0x1000             use                 bcachefs
2625
2626# EROFS
2627# https://kernel.googlesource.com/pub/scm/linux/kernel/git/xiang/erofs-utils/\
2628# +/refs/heads/experimental/include/erofs_fs.h#12
26291024                lelong              0xE0F5E1E2          EROFS filesystem
2630#>1028              lelong              x                   \b, checksum=%#x
2631>1032               lelong              >0                  \b, compat:
2632>>1032              lelong              &1                  SB_CHKSUM
2633>>1032              lelong              &2                  MTIME
2634>1036               byte                x                   \b, blocksize=%u
2635>1037               byte                x                   \b, exslots=%u
2636#>1038              leshort             x                   \b, root_nid=%d
2637#>1040              lequad              x                   \b, inodes=%ld
2638#>1048              leldate             x                   \b, build_time=%s
2639#>1056              lelong              x                   \b.%d
2640#>1060              lelong              x                   \b, blocks=%d
2641#>1064              lelong              x                   \b, metadata@%#x
2642#>1068              lelong              x                   \b, xattr@%#x
2643>1072               guid                x                   \b, uuid=%s
2644>1088               string              >0                  \b, name=%s
2645>1104               lelong              >0                  \b, incompat:
2646>>1104              lelong              &1                  LZ4_0PADDING
2647>>1104              lelong              &2                  BIG_PCLUSTER
2648>>1104              lelong              &4                  CHUNKED_FILE
2649>>1104              lelong              &8                  DEVICE_TABLE
2650>>1104              lelong              &16                 ZTAILPACKING
2651
2652# YAFFS
2653# The layout itself is undocumented, determined by the memory layout of the
2654# reference implementation. This signature is derived from the
2655# reference implementation code and generated test cases
2656# We recognize the start of an object header defined by yaffs_obj_hdr:
2657# (Note the values being encoded depending on platform endianess)
2658
2659# u32 type  /* enum yaffs_obj_type, valid 1-5  */
2660# u32 parent_obj_id; /* 1 for root objects we recognize */
2661# u16 sum_no_longer_used; /* checksum of name. Not used by YAFFS and memset to 0xFF */
2662# YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
2663
2664# mkyaffsimage always writes a root directory with empty name, then processing the target directory contents
2665# mkyaffs2image directly proceeds to writing entries with the appropriate u32 YAFFS_OBJECT_TYPE (1-5 valid), each with parent id 1
2666
26670         name      yaffs
2668>0        ulelong   1         \b, type file
2669>0        ulelong   2         \b, type symlink
2670>0        ulelong   3         \b, type root or directory
2671>0        ulelong   4         \b, type hardlink
2672>0        ulelong   5         \b, type special
2673>0xA      byte      0         \b, v1 root directory
2674>0xA      byte      !0        \b, object entry
2675>>0xA     string    x         (name: "%s")
2676
2677# Little Endian: XX 00 00 00 01 00 00 00 FF FF YY
2678# XX: 01 - 05 (object type)
2679# YY: 00 for version 1 root directory, > 00 for version 2 (name data)
26800x1       string    \x00\x00\x00\x01\x00\x00\x00\xFF\xFF
2681>0        ulelong   0
2682>0        ulelong   >5
2683>0        default   x         YAFFS filesystem root entry (little endian)
2684>>0       use       yaffs
2685
2686# Big Endian: 00 00 00 XX 00 00 00 01 FF FF YY
2687# XX: 01 - 05 (object type)
2688# YY: 00 for version 1 root directory, > 00 for version 2 (name data)
26890x4       string    \x00\x00\x00\x01\xFF\xFF
2690>0        string    \x00\x00\x00
2691>>0       ubelong   0
2692>>0       ubelong   >5
2693>>0       default   x         YAFFS filesystem root entry (big endian)
2694>>>0      use       \^yaffs
2695