Skip to content

Commit 467ede9

Browse files
committed
Add MBR format
1 parent 53ca5f2 commit 467ede9

File tree

13 files changed

+1047
-744
lines changed

13 files changed

+1047
-744
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ jpeg,
8989
json,
9090
[macho](doc/formats.md#macho),
9191
[matroska](doc/formats.md#matroska),
92+
[mbr](doc/formats.md#mbr),
9293
[mp3](doc/formats.md#mp3),
9394
mp3_frame,
9495
[mp4](doc/formats.md#mp4),

doc/dev.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- Create a directory `format/<name>`
66
- Copy some similar decoder, `format/format/bson.go` is quite small, to `format/<name>/<name>.go`
77
- Cleanup and fill in the register struct, rename `format.BSON` and add it
8-
to `format/fromat.go` and don't forget to change the string constant.
8+
to `format/format.go` and don't forget to change the string constant.
99
- Add an import to `format/all/all.go`
1010

1111
### Some general tips
@@ -38,7 +38,7 @@ Flags can be struct with bit-fields.
3838

3939
`<Field>?(<reader<length>?>|<type>Fn>)(...[, scalar.Mapper...]) <type>`
4040

41-
- If starts with `Field` a field will be added and first argument will be name of field. If not it will just read.
41+
- If it starts with `Field` a field will be added and first argument will be name of field. If not it will just read.
4242
- `<reader<length>?>|<type>Fn>` a reader or a reader function
4343
- `<reader<length>?>` Read bits using some decoder.
4444
- `U16` unsigned 16 bit integer.

doc/formats.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
|`json` |JSON |<sub></sub>|
6060
|[`macho`](#macho) |Mach-O&nbsp;macOS&nbsp;executable |<sub></sub>|
6161
|[`matroska`](#matroska) |Matroska&nbsp;file |<sub>`aac_frame` `av1_ccr` `av1_frame` `avc_au` `avc_dcr` `flac_frame` `flac_metadatablocks` `hevc_au` `hevc_dcr` `image` `mp3_frame` `mpeg_asc` `mpeg_pes_packet` `mpeg_spu` `opus_packet` `vorbis_packet` `vp8_frame` `vp9_cfm` `vp9_frame`</sub>|
62+
|[`mbr`](#mbr) |Master&nbsp;Boot&nbsp;Record |<sub></sub>|
6263
|[`mp3`](#mp3) |MP3&nbsp;file |<sub>`id3v2` `id3v1` `id3v11` `apev2` `mp3_frame`</sub>|
6364
|`mp3_frame` |MPEG&nbsp;audio&nbsp;layer&nbsp;3&nbsp;frame |<sub>`xing`</sub>|
6465
|[`mp4`](#mp4) |ISOBMFF&nbsp;MPEG-4&nbsp;part&nbsp;12&nbsp;and&nbsp;similar |<sub>`aac_frame` `av1_ccr` `av1_frame` `flac_frame` `flac_metadatablocks` `id3v2` `image` `jpeg` `mp3_frame` `avc_au` `avc_dcr` `mpeg_es` `hevc_au` `hevc_dcr` `mpeg_pes_packet` `opus_packet` `protobuf_widevine` `pssh_playready` `vorbis_packet` `vp9_frame` `vpx_ccr` `icc_profile`</sub>|
@@ -352,6 +353,15 @@ Return `matroska_path` string for a box decode value
352353
- https://www.matroska.org/technical/codec_specs.html
353354
- https://wiki.xiph.org/MatroskaOpus
354355

356+
### mbr
357+
358+
Supports decoding Master Boot Record data
359+
360+
#### References and links
361+
362+
- https://thestarman.pcministry.com/asm/mbr/PartTables.htm#mbr
363+
- https://en.wikipedia.org/wiki/Master_boot_record
364+
355365
### mp3
356366

357367
#### Options

doc/formats.svg

Lines changed: 748 additions & 742 deletions
Loading

format/all/all.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
_ "github.com/wader/fq/format/json"
2525
_ "github.com/wader/fq/format/macho"
2626
_ "github.com/wader/fq/format/matroska"
27+
_ "github.com/wader/fq/format/mbr"
2728
_ "github.com/wader/fq/format/mp3"
2829
_ "github.com/wader/fq/format/mp4"
2930
_ "github.com/wader/fq/format/mpeg"

format/all/help.fqtest

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,17 @@ out https://matroska.org/technical/specs/index.html
473473
out https://www.matroska.org/technical/basics.html
474474
out https://www.matroska.org/technical/codec_specs.html
475475
out https://wiki.xiph.org/MatroskaOpus
476+
"help(mbr)"
477+
out mbr: Master Boot Record decoder
478+
out Supports decoding Master Boot Record data
479+
out Examples:
480+
out # Decode file as mbr
481+
out $ fq -d mbr . file
482+
out # Decode value as mbr
483+
out ... | mbr
484+
out References and links
485+
out https://thestarman.pcministry.com/asm/mbr/PartTables.htm#mbr
486+
out https://en.wikipedia.org/wiki/Master_boot_record
476487
"help(mp3)"
477488
out mp3: MP3 file decoder
478489
out Options:

format/format.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ const (
6868
JSON = "json"
6969
MACHO = "macho"
7070
MATROSKA = "matroska"
71+
MBR = "mbr"
7172
MP3 = "mp3"
7273
MP3_FRAME = "mp3_frame"
7374
MP4 = "mp4"

format/mbr/mbr.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package mbr
2+
3+
import (
4+
"embed"
5+
"fmt"
6+
7+
"github.com/wader/fq/format"
8+
"github.com/wader/fq/format/registry"
9+
"github.com/wader/fq/pkg/decode"
10+
"github.com/wader/fq/pkg/scalar"
11+
)
12+
13+
//go:embed mbr.jq
14+
var mbrFS embed.FS
15+
16+
func init() {
17+
registry.MustRegister(decode.Format{
18+
Name: format.MBR,
19+
Description: "Master Boot Record",
20+
DecodeFn: mbrDecode,
21+
Functions: []string{"_help"},
22+
Files: mbrFS,
23+
})
24+
}
25+
26+
func decodePartitionTableEntry(d *decode.D) {
27+
d.FieldU8("boot_indicator", scalar.UToDescription{
28+
0x80: "active",
29+
0x00: "inactive",
30+
})
31+
d.FieldStrScalarFn("starting_chs_vals", decodeCHSBytes)
32+
d.FieldU8("partition_type", partitionTypes)
33+
d.FieldStrScalarFn("ending_chs_vals", decodeCHSBytes)
34+
d.FieldStrScalarFn("starting_sector", decodeCHSBytes)
35+
d.U8() // extra byte
36+
d.FieldScalarU32("partition_size")
37+
}
38+
39+
// Because this is a fixed-sized table, I am opting to use a
40+
// FieldStruct instead of a FieldArray
41+
func decodePartitionTable(d *decode.D) {
42+
d.FieldStruct("entry_1", decodePartitionTableEntry)
43+
d.FieldStruct("entry_2", decodePartitionTableEntry)
44+
d.FieldStruct("entry_3", decodePartitionTableEntry)
45+
d.FieldStruct("entry_4", decodePartitionTableEntry)
46+
}
47+
48+
// Source: https://thestarman.pcministry.com/asm/mbr/PartTables.htm#Decoding
49+
func decodeCHSBytes(d *decode.D) scalar.S {
50+
head, _ := d.Bits(8)
51+
sectorHighBits, err := d.Bits(2)
52+
if err != nil {
53+
d.IOPanic(err, "chs")
54+
}
55+
sector, _ := d.Bits(6)
56+
cylinderLowerBits, err := d.Bits(8)
57+
if err != nil {
58+
d.IOPanic(err, "chs")
59+
}
60+
cylinder := (sectorHighBits << 2) | cylinderLowerBits
61+
return scalar.S{Actual: fmt.Sprintf("CHS(%x, %x, %x)", cylinder, head, sector)}
62+
}
63+
64+
func mbrDecode(d *decode.D, in interface{}) interface{} {
65+
d.Endian = decode.LittleEndian
66+
67+
d.FieldRawLen("code_area", 446*8)
68+
d.FieldStruct("partition_table", decodePartitionTable)
69+
d.FieldU16("boot_record_sig", scalar.ActualHex)
70+
//d.AssertU(0xaa55)
71+
return nil
72+
}

format/mbr/mbr.jq

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def _mbr__help:
2+
{ notes: "Supports decoding Master Boot Record data",
3+
links: [
4+
{url: "https://thestarman.pcministry.com/asm/mbr/PartTables.htm#mbr"},
5+
{url: "https://en.wikipedia.org/wiki/Master_boot_record"}
6+
]
7+
};

format/mbr/partition_types.go

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
package mbr
2+
3+
import (
4+
"github.com/wader/fq/pkg/scalar"
5+
)
6+
7+
// Source: https://thestarman.pcministry.com/asm/mbr/PartTypes.htm
8+
var partitionTypes scalar.UToDescription = scalar.UToDescription{
9+
0x00: "empty",
10+
0x01: "12-bit FAT",
11+
0x02: "XENIX root",
12+
0x03: "XENIX /usr (obsolete)",
13+
0x04: "16-bit FAT",
14+
0x05: "Extended Partition",
15+
0x06: "16-bit FAT, partition",
16+
0x07: "Installable file systems: HPFS or NTFS. Also, QNX and Advanced Unix.",
17+
0x08: "AIX bootable partition",
18+
0x09: "AIX data partition",
19+
0x0A: "Coherent swap partition, OPUS or OS/2 Boot Manager.",
20+
0x0B: "32-bit FAT",
21+
0x0C: "32-bit FAT, using INT 13 Extensions.",
22+
0x0E: "16-bit FAT >= 32 MB, using INT 13 Extensions.",
23+
0x0F: "Extended Partition, using INT 13 Extensions",
24+
0x10: "OPUS",
25+
0x11: "Hidden 12-bit FAT.",
26+
0x12: "Compaq diagnostics.",
27+
0x14: "Hidden 16-bit FAT",
28+
0x16: "Hidden 16-bit FAT, partition >= 32 MB",
29+
0x17: "Hidden IFS (HPFS, NTFS).",
30+
0x18: "AST Windows swap file",
31+
0x19: "Willowtech Photon coS",
32+
0x1B: "Hidden 32-bit FAT",
33+
0x1C: "Hidden 32-bit FAT, Ext INT 13",
34+
0x1E: "Hidden 16-bit FAT >32 MB, Ext. INT 13 (PowerQuest specific)",
35+
0x20: "Willowsoft Overture File System (OFS1)",
36+
0x21: "reserved (HP Volume Expansion, SpeedStor variant)",
37+
0x22: "Oxygen Extended",
38+
0x23: "reserved (HP Volume Expansion, SpeedStor variant?)",
39+
0x24: "NEC MS-DOS 3.x",
40+
0x26: "reserved (HP Volume Expansion, SpeedStor variant?)",
41+
0x31: "reserved (HP Volume Expansion, SpeedStor variant?)",
42+
0x33: "reserved (HP Volume Expansion, SpeedStor variant?)",
43+
0x34: "reserved (HP Volume Expansion, SpeedStor variant?)",
44+
0x36: "reserved (HP Volume Expansion, SpeedStor variant?)",
45+
0x38: "Theos",
46+
0x3C: "PowerQuest Files Partition Format",
47+
0x3D: "Hidden NetWare",
48+
0x40: "VENIX 80286",
49+
0x41: "Personal RISC Boot, PowerPC boot partition",
50+
0x42: "Secure File System, Windows 2000/XP (NT 5)",
51+
0x43: "Alternative Linux native file system (EXT2fs) PTS-DOS 6.70 & BootWizard: DR-DOS",
52+
0x45: "Priam, EUMEL/Elan. ",
53+
0x46: "EUMEL/Elan",
54+
0x47: "EUMEL/Elan",
55+
0x48: "EUMEL/Elan",
56+
0x4A: "ALFS/THIN lightweight filesystem for DOS",
57+
0x4D: "QNX",
58+
0x4E: "QNX",
59+
0x4F: "QNX, Oberon boot/data partition.",
60+
0x50: "Ontrack Disk Manager, read-only partition, FAT partition (Logical sector size varies)",
61+
0x51: "Ontrack Disk Manager, read/write partition, FAT partition (Logical sector size varies) Novell?",
62+
0x52: "CP/M, Microport System V/386.",
63+
0x53: "Ontrack Disk Manager, write-only",
64+
0x54: "Ontrack Disk Manager 6.0 (DDO)",
65+
0x55: "EZ-Drive 3.05",
66+
0x56: "Golden Bow VFeature",
67+
0x5C: "Priam EDISK",
68+
0x61: "Storage Dimensions SpeedStor",
69+
0x63: "GNU HURD, Mach, MtXinu BSD 4.2 on Mach, Unix Sys V/386, 386/ix.",
70+
0x64: "Novell NetWare 286, SpeedStore.",
71+
0x65: "Novell NetWare (3.11 and 4.1)",
72+
0x66: "Novell NetWare 386",
73+
0x67: "Novell NetWare",
74+
0x68: "Novell NetWare",
75+
0x69: "Novell NetWare 5+",
76+
0x70: "DiskSecure Multi-Boot",
77+
0x75: "IBM PC/IX",
78+
0x80: "Minix v1.1 - 1.4a, Old MINIX (Linux).",
79+
0x81: "Linux/Minix v1.4b+, Mitac Advanced Disk Manager.",
80+
0x82: "Linux Swap partition, Prime or Solaris (Unix).",
81+
0x83: "Linux native file systems (ext2/3/4, JFS, Reiser, xiafs, and others).",
82+
0x84: "OS/2 hiding type 04h partition",
83+
0x86: "NT Stripe Set, Volume Set?",
84+
0x87: "NT Stripe Set, Volume Set?, HPFS FT mirrored partition.",
85+
0x93: "Amoeba file system, Hidden Linux EXT2 partition (PowerQuest).",
86+
0x94: "Amoeba bad block table",
87+
0x99: "Mylex EISA SCSI",
88+
0x9F: "BSDI",
89+
0xA0: "Phoenix NoteBios Power Management 'Save to Disk', IBM hibernation.",
90+
0xA1: "HP Volume Expansion (SpeedStor variant)",
91+
0xA3: "HP Volume Expansion (SpeedStor variant)",
92+
0xA4: "HP Volume Expansion (SpeedStor variant)",
93+
0xA5: "FreeBSD/386",
94+
0xA6: "OpenBSD",
95+
0xA7: "NextStep Partition",
96+
0xA9: "NetBSD",
97+
0xAA: "Olivetti DOS with FAT12",
98+
0xB0: "Bootmanager BootStar by Star-Tools GmbH",
99+
0xB1: "HP Volume Expansion (SpeedStor variant)",
100+
0xB3: "HP Volume Expansion (SpeedStor variant)",
101+
0xB4: "HP Volume Expansion (SpeedStor variant)",
102+
0xB6: "HP Volume Expansion (SpeedStor variant)",
103+
0xB7: "BSDI file system or secondarily swap",
104+
0xB8: "BSDI swap partition or secondarily file system",
105+
0xBB: "PTS BootWizard (hidden) 4.0",
106+
0xBC: "May be an Acronis 'Backup' or 'Secure Zone' partition, when labeled 'ACRONIS SZ' (FAT32, LBA mapped, primary).",
107+
0xBE: "Solaris boot partition",
108+
0xC0: "Novell DOS/OpenDOS/DR-OpenDOS/DR-DOS secured partition, or CTOS (reported by a client).",
109+
0xC1: "DR-DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition",
110+
0xC2: "Reserved for DR-DOS 7+",
111+
0xC3: "Reserved for DR-DOS 7+",
112+
0xC4: "DR-DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition",
113+
0xC6: "DR-DOS 6.0 LOGIN.EXE-secured Huge partition, or: Corrupted FAT16 volume/stripe (V/S) set (Windows NT).",
114+
0xC7: "Syrinx, Cyrnix, HPFS FT disabled mirrored partition, or: Corrupted NTFS volume/stripe set.",
115+
0xC8: "Reserved for DR-DOS 7+",
116+
0xC9: "Reserved for DR-DOS 7+",
117+
0xCA: "Reserved for DR-DOS 7+",
118+
0xCB: "Reserved for DR-DOS secured FAT32",
119+
0xCC: "Reserved for DR-DOS secured FAT32X (LBA)",
120+
0xCD: "Reserved for DR-DOS 7+",
121+
0xCE: "Reserved for DR-DOS secured FAT16X (LBA)",
122+
0xCF: "Reserved for DR-DOS secured Extended partition (LBA)",
123+
0xD0: "Multiuser DOS secured (FAT12???)",
124+
0xD1: "Old Multiuser DOS secured FAT12",
125+
0xD4: "Old Multiuser DOS secured FAT16 (<= 32M)",
126+
0xD5: "Old Multiuser DOS secured extended partition",
127+
0xD6: "Old Multiuser DOS secured FAT16 (BIGDOS > 32 Mb)",
128+
0xD8: "CP/M 86",
129+
0xDB: "CP/M, Concurrent CP/M, Concurrent DOS, or CTOS (Convergent Technologies OS).",
130+
0xDE: "Dell partition. Normally it contains a FAT16 file system of about 32 MB.",
131+
0xDF: "BootIt EMBRM",
132+
0xE1: "SpeedStor 12-bit FAT Extended partition, DOS access (Linux).",
133+
0xE2: "DOS read-only (Florian Painke's XFDISK 1.0.4)",
134+
0xE3: "SpeedStor (Norton, Linux says DOS R/O)",
135+
0xE4: "SpeedStor 16-bit FAT Extended partition",
136+
0xE5: "Tandy DOS with logical sectored FAT",
137+
0xE6: "Storage Dimensions SpeedStor",
138+
0xEB: "BeOS file system",
139+
0xED: "Reserved for Matthias Paul's Spryt*x",
140+
0xEE: "GPT Protective MBR followed by a GPT/EFI Header. Used to define a fake partition covering the entire disk.",
141+
0xEF: "EFI/UEFI System Partition (or ESP)",
142+
0xF1: "SpeedStor Dimensions (Norton,Landis)",
143+
0xF2: "DOS 3.3+ second partition, Unisys DOS with logical sectored FAT.",
144+
0xF3: "Storage Dimensions SpeedStor",
145+
0xF4: "SpeedStor Storage Dimensions (Norton,Landis)",
146+
0xF5: "Prologue",
147+
0xF6: "Storage Dimensions SpeedStor",
148+
0xFD: "Reserved for FreeDOS (http://www.freedos.org)",
149+
0xFE: "LANstep, IBM PS/2 IML (Initial Microcode Load) partition, or...",
150+
0xFF: "Xenix bad-block table",
151+
}

format/mbr/testdata/mbr.bin

512 Bytes
Binary file not shown.

format/mbr/testdata/mbr.fqtest

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
$ fq -d mbr dv mbr.bin
2+
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: mbr.bin (mbr) 0x0-0x1ff.7 (512)
3+
0x000|eb 63 90 90 90 90 90 90 90 90 90 90 90 90 90 90|.c..............| code_area: raw bits 0x0-0x1bd.7 (446)
4+
* |until 0x1bd.7 (446) | |
5+
| | | partition_table{}: 0x1be-0x1fd.7 (64)
6+
| | | entry_1{}: 0x1be-0x1cd.7 (16)
7+
0x1b0| 80 | . | boot_indicator: 128 (active) 0x1be-0x1be.7 (1)
8+
0x1b0| 02| .| starting_chs_vals: "CHS(0, 2, 1)" 0x1bf-0x1c1.7 (3)
9+
0x1c0|01 00 |.. |
10+
0x1c0| cd | . | partition_type: 205 (Reserved for DR-DOS 7+) 0x1c2-0x1c2.7 (1)
11+
0x1c0| 3f e0 ff | ?.. | ending_chs_vals: "CHS(ff, 3f, 20)" 0x1c3-0x1c5.7 (3)
12+
0x1c0| 40 00 00 | @.. | starting_sector: "CHS(0, 40, 0)" 0x1c6-0x1c8.7 (3)
13+
0x1c0| ec 26 79 00 | .&y. | partition_size: 7939820 0x1ca-0x1cd.7 (4)
14+
| | | entry_2{}: 0x1ce-0x1dd.7 (16)
15+
0x1c0| 00 | . | boot_indicator: 0 (inactive) 0x1ce-0x1ce.7 (1)
16+
0x1c0| 3f| ?| starting_chs_vals: "CHS(ff, 3f, 20)" 0x1cf-0x1d1.7 (3)
17+
0x1d0|e0 ff |.. |
18+
0x1d0| ef | . | partition_type: 239 (EFI/UEFI System Partition (or ESP)) 0x1d2-0x1d2.7 (1)
19+
0x1d0| 3f e0 ff | ?.. | ending_chs_vals: "CHS(ff, 3f, 20)" 0x1d3-0x1d5.7 (3)
20+
0x1d0| 2c 27 79 | ,'y | starting_sector: "CHS(79, 2c, 27)" 0x1d6-0x1d8.7 (3)
21+
0x1d0| 00 20 00 00 | . .. | partition_size: 8192 0x1da-0x1dd.7 (4)
22+
| | | entry_3{}: 0x1de-0x1ed.7 (16)
23+
0x1d0| 00 | . | boot_indicator: 0 (inactive) 0x1de-0x1de.7 (1)
24+
0x1d0| 00| .| starting_chs_vals: "CHS(0, 0, 0)" 0x1df-0x1e1.7 (3)
25+
0x1e0|00 00 |.. |
26+
0x1e0| 00 | . | partition_type: 0 (empty) 0x1e2-0x1e2.7 (1)
27+
0x1e0| 00 00 00 | ... | ending_chs_vals: "CHS(0, 0, 0)" 0x1e3-0x1e5.7 (3)
28+
0x1e0| 00 00 00 | ... | starting_sector: "CHS(0, 0, 0)" 0x1e6-0x1e8.7 (3)
29+
0x1e0| 00 00 00 00 | .... | partition_size: 0 0x1ea-0x1ed.7 (4)
30+
| | | entry_4{}: 0x1ee-0x1fd.7 (16)
31+
0x1e0| 00 | . | boot_indicator: 0 (inactive) 0x1ee-0x1ee.7 (1)
32+
0x1e0| 00| .| starting_chs_vals: "CHS(0, 0, 0)" 0x1ef-0x1f1.7 (3)
33+
0x1f0|00 00 |.. |
34+
0x1f0| 00 | . | partition_type: 0 (empty) 0x1f2-0x1f2.7 (1)
35+
0x1f0| 00 00 00 | ... | ending_chs_vals: "CHS(0, 0, 0)" 0x1f3-0x1f5.7 (3)
36+
0x1f0| 00 00 00 | ... | starting_sector: "CHS(0, 0, 0)" 0x1f6-0x1f8.7 (3)
37+
0x1f0| 00 00 00 00 | .... | partition_size: 0 0x1fa-0x1fd.7 (4)
38+
0x1c0| 00 | . | unknown0: raw bits 0x1c9-0x1c9.7 (1)
39+
0x1d0| 00 | . | unknown1: raw bits 0x1d9-0x1d9.7 (1)
40+
0x1e0| 00 | . | unknown2: raw bits 0x1e9-0x1e9.7 (1)
41+
0x1f0| 00 | . | unknown3: raw bits 0x1f9-0x1f9.7 (1)
42+
0x1f0| 55 aa| U.| boot_record_sig: 0xaa55 0x1fe-0x1ff.7 (2)

pkg/interp/testdata/args.fqtest

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ jpeg Joint Photographic Experts Group file
150150
json JSON
151151
macho Mach-O macOS executable
152152
matroska Matroska file
153+
mbr Master Boot Record
153154
mp3 MP3 file
154155
mp3_frame MPEG audio layer 3 frame
155156
mp4 ISOBMFF MPEG-4 part 12 and similar

0 commit comments

Comments
 (0)