From 8e6248aa2dc999198a7b2fc276bf803557a96a99 Mon Sep 17 00:00:00 2001 From: Nik Date: Tue, 27 Dec 2022 00:56:24 +0100 Subject: [PATCH] patterns: Added PCX, GZip and PFS0 pattern --- README.md | 3 + patterns/gzip.hexpat | 77 ++++++++++++++++++++++++ patterns/pcx.hexpat | 52 ++++++++++++++++ patterns/pfs0.hexpat | 38 ++++++++++++ tests/patterns/test_data/gzip.hexpat.gz | Bin 0 -> 21791 bytes tests/patterns/test_data/pcx.hexpat.pcx | Bin 0 -> 67763 bytes 6 files changed, 170 insertions(+) create mode 100644 patterns/gzip.hexpat create mode 100644 patterns/pcx.hexpat create mode 100644 patterns/pfs0.hexpat create mode 100644 tests/patterns/test_data/gzip.hexpat.gz create mode 100644 tests/patterns/test_data/pcx.hexpat.pcx diff --git a/README.md b/README.md index 87f6870..9a3cfb9 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,9 @@ Hex patterns, include patterns and magic files for the use with the ImHex Hex Ed | FDT | | [`patterns/fdt.hexpat`](patterns/fdt.hexpat) | Flat Linux Device Tree blob | | StuffItV5 | `application/x-stuffit` | [`patterns/sit5.hexpat`](patterns/sit5.hexpat) | StuffIt V5 archive | | NBT | | [`patterns/nbt.hexpat`](patterns/nbt.hexpat) | Minecraft NBT format | +| PCX | `application/x-pcx` | [`patterns/pcx.hexpat`](patterns/pcx.hexpat) | PCX Image format | +| GZIP | `application/gzip` | [`patterns/gzip.hexpat`](patterns/gzip.hexpat) | GZip compressed data format | +| PFS0 | | [`patterns/pfs0.hexpat`](patterns/pfs0.hexpat) | Nintendo Switch PFS0 archive (NSP files) | ### Scripts diff --git a/patterns/gzip.hexpat b/patterns/gzip.hexpat new file mode 100644 index 0000000..fc9fcf5 --- /dev/null +++ b/patterns/gzip.hexpat @@ -0,0 +1,77 @@ +#pragma MIME application/gzip + +#include +#include +#include + +bitfield Flags { + FTEXT : 1; + FHCRC : 1; + FEXTRA : 1; + FNAME : 1; + FCOMMENT : 1; + padding : 3; +} [[right_to_left]]; + +bitfield ExtraFlags { + padding : 1; + maximumCompression : 1; + fastestCompression : 1; + padding : 5; +}; + +enum CompressionMethod : u8 { + Reserved = 0 ... 7, + Deflate = 8 +}; + +enum OperatingSystemID : u8 { + FATFileSystem = 0x00, + Amiga = 0x01, + VMS = 0x02, + Unix = 0x03, + VM_CMS = 0x04, + AtariTOS = 0x05, + HPFSFileSystem = 0x06, + Macintosh = 0x07, + ZSystem = 0x08, + CP_M = 0x09, + TOPS_20 = 0x0A, + NTFSFileSystem = 0x0B, + QDOS = 0x0C, + AcordRISCOS = 0x0D, + Unknown = 0xFF +}; + +struct GZip { + u16 signature; + CompressionMethod compressionMethod; + Flags flags; + type::time32_t modificationTime; + ExtraFlags extraFlags; + OperatingSystemID operatingSystemId; + + if (flags.FEXTRA) { + u16 extraLength; + u8 extraField[extraLength]; + } + + if (flags.FNAME) { + char originalFileName[]; + } + + if (flags.FCOMMENT) { + char comment[]; + } + + if (flags.FHCRC) { + u16 crc16; + } + + u8 data[while($ < std::mem::size() - 8)] [[sealed]]; + + u32 crc32; + type::Size isize; +}; + +GZip gzip @ 0x00; \ No newline at end of file diff --git a/patterns/pcx.hexpat b/patterns/pcx.hexpat new file mode 100644 index 0000000..583ec3a --- /dev/null +++ b/patterns/pcx.hexpat @@ -0,0 +1,52 @@ +#pragma MIME application/x-pcx + +#include + +enum Encoding : u8 { + NoEncoding = 0x00, + RunLengthEncoding = 0x01 +}; + +enum PaletteType : u16 { + MonochromeOrColorInformation = 0x01, + GrayscaleInformation = 0x02 +}; + +enum Version : u8 { + V2_5 = 0x00, + V2_8WithPalette = 0x02, + V2_8_WithoutPalette = 0x03, + PaintbrushForWindows = 0x04, + V3_0 = 0x05 +}; + +struct Header { + u8 magic; + Version version; + Encoding encoding; + u8 bitsPerPixel; + u16 xMin, yMin; + u16 xMax, yMax; + u16 hdpi, vdpi; +}; + +struct RGB8 { + u8 r, g, b; +} [[sealed, color(std::format("{:02X}{:02X}{:02X}", this.r, this.g, this.b))]]; + +struct Palette { + RGB8 color[16]; +}; + +struct PCX { + Header header; + Palette palette; + padding[1]; + u8 numPlanes; + u16 bytesPerLine; + PaletteType paletteType; + u16 hres, vres; + padding[54]; +}; + +PCX pcx @ 0x00; \ No newline at end of file diff --git a/patterns/pfs0.hexpat b/patterns/pfs0.hexpat new file mode 100644 index 0000000..7646ee8 --- /dev/null +++ b/patterns/pfs0.hexpat @@ -0,0 +1,38 @@ +#include +#include + +#include + +struct FileEntry { + u64 dataOffset; + type::Size dataSize; + u32 nameOffset; + padding[4]; +}; + +struct String { + char value[]; +}; + +struct Header { + type::Magic<"PFS0"> magic; + u32 numFiles; + type::Size stringTableSize; + padding[4]; + + FileEntry fileEntryTable[numFiles]; + String strings[numFiles]; +}; + +struct File { + char name[] @ addressof(parent.header.strings) + parent.header.fileEntryTable[std::core::array_index()].nameOffset; + u8 data[parent.header.fileEntryTable[std::core::array_index()].dataSize] @ parent.header.fileEntryTable[std::core::array_index()].dataOffset [[sealed]]; +}; + +struct PFS0 { + Header header; + + File files[header.numFiles]; +}; + +PFS0 pfs0 @ 0x00; \ No newline at end of file diff --git a/tests/patterns/test_data/gzip.hexpat.gz b/tests/patterns/test_data/gzip.hexpat.gz new file mode 100644 index 0000000000000000000000000000000000000000..ba0f89d0b457ed238642f125179217a8c379b6f7 GIT binary patch literal 21791 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 S9^YNf;Qt$SnW1U32mt`PwJa6@ literal 0 HcmV?d00001 diff --git a/tests/patterns/test_data/pcx.hexpat.pcx b/tests/patterns/test_data/pcx.hexpat.pcx new file mode 100644 index 0000000000000000000000000000000000000000..c83d32192457cd63a02b328268c93c0a66c0aa85 GIT binary patch literal 67763 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 G?EeR_WBjlH literal 0 HcmV?d00001