This is the specifications for the archive file which is handled by the Game Extractor plugin Archive_DLL_MZ.

Endian Order:Little Endian
Compression:None
Encryption:None


This format is used by the following Games:
DLL/EXE Program Resources *.dll *.exe *.ocx *.msstyles
Petz 5 *.env cat dog clo toy
Catz 5 *.env cat dog clo toy
Dogz 5 *.env cat dog clo toy
Enigma Virtual Box *.exe
Balacera Brothers *.exe
Blood Paws Unleashed *.exe
Buccaneers: Shipshape *.exe
Charnel House Trilogy *.exe
3D Ultra Minigolf *.dlx


This is the format specification information:
 
// HEADER
  2 - Header (MZ)
  2 - Number of Fields following??? (3)
  4 - Unknown
  4 - Unknown
  4 - Unknown
  4 - Offset to PE Header (always 184, but not always the right value!)
  4 - null
  4 - Offset to MS-DOS Program (64)
  32 - null
  4 - Offset to PE Header (this is the correct field!)
  X - MS-DOS Program

// PE HEADER
  4 - Header (PE)

  // IMAGE_FILE_HEADER
    2 - Target Platform (332 = 32-bit Intel)
    2 - Number Of Section Tables
    4 - Created Timestamp
    4 - Offset To Symbol Table (usually null)
    4 - Number Of Symbols In The Symbol Table
    2 - Length of IMAGE_OPTIONAL_HEADER
    2 - Characteristics (EXE Attributes)

  // IMAGE_OPTIONAL_HEADER
    2 - Type Code (267 = 32-bit Intel)
    1 - Visual Studio Major Version (eg. 6 = Visual Studio 6.X)
    1 - Visual Studio Sub Version (eg. 1 = Visual Studio X.1)
    4 - Length of IMAGE_SCN_CNT_CODE section
    4 - Length of Initialized Data
    4 - Length of Uninitialized Data
    4 - Offset to Program Entry Point
    4 - Base Of Code
    4 - Base Of Data
    4 - Type Of EXE File (268435456 = DLL)
    4 - Section Alignment
    4 - File Alignment (Padding Size? usually 4096)
    2 - Major OS Version
    2 - Minor OS Version
    2 - Major Image Version
    2 - Minor Image Version
    2 - Major Subsystem Version
    2 - Minor Subsystem Version
    4 - Win32 Version (unused - usually null)
    4 - Length Of Image (length of executable data? - multiple of the SectionAlignment)
    4 - Length Of Headers (length of all headers, resources, etc. - multiple of the FileAlignment)
    4 - Checksum
    2 - Subsystem Required
    2 - DLL Characteristics
    4 - Length Of Stack Reserve (initial memory size alocated to this file?)
    4 - Length Of Stack Commit
    4 - Length Of Heap Reserve
    4 - Length Of Heap Commit
    4 - Loader Flags (unused)
    4 - Number Of Entries In The Data Directory (16)

    // DATA DIRECTORY
      // for each entry
        4 - Virtual Address To Data (offset)
        4 - Length Of Data

  // SECTION TABLES
    // for each section table
      8 - Section Name (null terminated) (.rsrc = Resource)
      4 - Virtual Length (length of data - kinda)
      4 - Virtual Address (offset to data - kinda)
      4 - Length Of Raw Data (multiple of FileAlignment)
      4 - Offset To Raw Data (multiple of FileAlignment)
      4 - Offset To Relocations
      4 - Offset To Line Numbers
      2 - Number Of Relocations
      2 - Number Of Line Numbers
      4 - Characteristics

  // ( GUESSED FROM THIS POINT ONWARDS!!! )

  // RESOURCE TABLE
    4 - Characteristics? (null)
    4 - Timestamp? (null)
    4 - Version Number? (null)
    2 - Number Of Names Entries
    2 - Number Of ID Entries (Different Languages?)

    // for each named entry + each ID entry
      4 - Resource Name OR ID (ignore bit#32)
      if (bit#32 == 1)
        // Offset To Resource Name (relative to the start of the resource table)
      else
        // The first 2 bytes are the resource ID, the last 2 bytes are null

      4 - Offset To Resource (relative to the start of the resource table)
      if (bit#32 of resourceOffset == 1)
        // offset points to a nested resource table (repeat from "//RESOURCE TABLE")
      else
        // offset points to the details for this resource

    // RESOURCE DETAILS
      // for each resource
        4 - File Offset
        4 - File Length
        8 - null

    // RESOURCE NAMES
      // for each named resource
        2 - Filename Length [*2 for unicode]
        X - Filename (unicode)

    // RESOURCE DATA
      // for each resource
        X - File Data

X - Other Table Data
X - Executable Data


Game Extractor is able to read files of this type, as well as files from thousands of other games. To give it a try, download Game Extractor (Basic Version) for free, and see what it can do.

For further information on this format, refer to the source code on our GitHub repository.