Skip to content
Ilia Maslakov edited this page Aug 30, 2026 · 8 revisions

mcstruct: shipped def-files

Every def-file below is in src/panel-plugins/mcstruct/data/ and is found by the signature or name pattern in stl.als. They are part of mc and come under the GPL-3.0-or-later. Most were written after the format descriptions of the Kaitai Struct formats gallery (the "source" column names the .ksy); data/NOTICE credits those sources. A "partial" file shows the part of the format that STL5 can describe today.

def-file source notes
aix_utmp.stl log/aix_utmp timestamp with tu64
allegro_dat.stl game/allegro_dat properties and object sizes; typed bodies by the last property need a string compare
amlogic_mpt.stl filesystem/amlogic_emmc_partitions
andes_fw.stl firmware/andes_firmware
android_dto.stl archive/android_dto entry size assumed 32 (dt_entry_size is a field
android_img.stl archive/android_img header versions 0-2; image positions shown with =x
android_super.stl filesystem/android_super slot 0 primary metadata and its partition table
apm.stl filesystem/apm_partition_table open at 512; count from the first entry with @u32
applesd.stl filesystem/apple_single_double entry table; FinderInfo is a separate structure for F3 (typed body by entry type
asn1_der.stl serialization/asn1/asn1_der constructed elements entered, tree listed flat
asus_bootldr.stl archive/android_bootldr_asus chunk id validation needs
au.stl media/au
avantes_roh60.stl scientific/spectroscopy/avantes_roh60
avi.stl media/avi + common/riff flat chunk walk, LIST entered, avih/strh decoded
bitcoin_tx.stl network/bitcoin_transaction scripts skipped as blocks
blend.stl media/blender_blend block headers; the DNA1 catalogue is skipped (nested strz lists)
bson.stl serialization/bson one document level, embedded documents as blocks (recursion)
btrfs_stream.stl filesystem/btrfs_stream TLV values typed by attribute id and length
cfb.stl serialization/microsoft_cfb header and the first directory sector; FILETIME with tf
chg.stl cad/monomakh_sapr_chg
chrome_pak.stl serialization/chrome_pak versions 4 and 5
cpio_old.stl archive/cpio_old_le mtime shown with =t
cramfs.stl filesystem/cramfs root directory only (a tree needs recursion); size/gid split shown with =
dcx.stl image/pcx_dcx #include "pcx.stl", jump to PCX per offset
dex.stl executable/dex header and string ids with jumps to MUTF-8 strings; other id tables raw
dicom.stl image/dicom explicit VR elements, sequences entered; implicit VR data sets and the 4000-line dictionary not carried (a legend per tag)
dime.stl network/dime_message 4-byte padding with "+ (4 - ^@ % 4) % 4"
dns.stl network/dns_packet names label by label, compression pointer shown as m16; typed rdata for A and AAAA only
dune2_pak.stl game/dune_2_pak file sizes (next offset - offset) need
edid.stl hardware/edid manufacturer letters and gamma need; checksum needs; detailed timing descriptors added beyond the ksy
efi_siglist.stl security/efivar_signature_list signature type guid not named (guid legends)
ether.stl network/ethernet_frame + ipv4_packet + ipv6_packet + tcp_segment + udp_datagram one flat structure with #if chains instead of imports and switch-on; IPv6 header only
exif.stl image/exif TIFF IFD0 with jumps to Exif / GPS / Interop IFDs; values not typed by count
ext2.stl filesystem/ext2 superblock and group descriptors; inodes and directories need a block-size aware walk
fallout2_dat.stl game/fallout2_dat file contents via raw or inflate
fallout_dat.stl game/fallout_dat Pascal strings as a length bytec (sp takes the follower as the length, not a maximum)
ftl_dat.stl game/ftl_dat records by jump
gbr.stl image/gimp_brush
gif.stl image/gif sub-block bytes skipped, not listed
glb.stl 3d/gltf_binary
glshaders.stl media/android_opengl_shaders_cache 4-byte alignment with "+ ((^@3) & ~3) - ^@"
gpt.stl filesystem/gpt_partition_table open at 512 (alias); header crc needs
gt_vol.stl game/gran_turismo_vol offset and size per entry shown with =x and = from the offset table
gzip.stl archive/gzip trailer via ". $size - 8"
hashcat_restore.stl log/hashcat_restore argv as sc.0a strings
hccap.stl network/hccap
hccapx.stl network/hccapx
heaps_pak.stl game/heaps_pak root directory only (recursive directories)
homm_agg.stl game/heroes_of_might_and_magic_agg name table found through @u32 of the last entry
homm_bmp.stl game/heroes_of_might_and_magic_bmp
huawei_bootldr.stl archive/android_bootldr_huawei
icc.stl image/icc_4 header and tag table with a jump to each tag's type signature; tag bodies not typed
icmp.stl network/icmp_packet
ico.stl image/ico is_png folded into the jump target (_ICO_image picks PNG or DIB)
id3v1.stl media/id3v1_1
id3v2.stl media/id3v2_3 + id3v2_4 synchsafe sizes through @u8 shifts; text frames decoded
ines.stl firmware/ines mapper shown with =
iso9660.stl filesystem/iso9660 PVD, root directory by jump (ISO_DIR follows subdirectories), L path table; both-endian fields listed twice
ivf.stl media/vp8_duck_ivf
java_class.stl executable/java_class constant pool walked with a #set slot counter (Long/Double take two); attributes skipped by length
journal.stl log/systemd_journal data, field and entry objects decoded
lnk.stl windows/windows_lnk_file shell items inlined (an #include cannot be entered in place), link info, string data; FILETIME with tf
luks.stl filesystem/luks LUKS1
lvm2.stl LVM2 sources label; LVM2_MDA for the metadata area header via F3
lzh.stl archive/lzh header levels 0 and 2, as the ksy
macho.stl executable/mach_o header and load commands (segments with sections, dylibs, uuid, build version, main, dyld info, linkedit data)
macho_fat.stl executable/mach_o_fat slices not followed into mach_o (not ported yet)
mar.stl archive/mozilla_mar
mcap.stl log/mcap top-level fields of every record type; chunk contents not entered
md2.stl game/quake2_md2 frame vertices as a block; GL command list walked
mdl.stl game/quake_mdl frame vertices skipped as a block; grouped frames use a #set count
midi.stl media/standard_midi_file running status kept in a #set variable
minidump.stl windows/windows_minidump stream directory with typed jumps for system info, misc info, thread, memory, memory64 and exception streams
mo.stl database/gettext_mo strings by jump from the descriptor; the hash lookup is an algorithm, not a structure
mov.stl media/quicktime_mov containers entered, tree listed flat; ftyp, mvhd, tkhd, mdhd, hdlr decoded
msgpack.stl serialization/msgpack values listed flat; a map or array row says how many items follow
nanoapp.stl executable/android_nanoapp_header
nitf.stl image/nitf file header and segment table; NITF_IMAGE for an image subheader
nt_mdt.stl scientific/nt_mdt/nt_mdt frames; MDA calibrations, spectroscopy variables, curves blocks
nt_mdt_pal.stl scientific/nt_mdt/nt_mdt_pal per-table counts read back from the meta records with @u8/@u16
ogg.stl media/ogg page body length summed over the segment table in a #repeat
op2.stl media/genmidi_op2 operator settings as 6 raw bytes
openpgp.stl security/openpgp_message old and new packet headers, public key, user id, signature and session key bodies
pak.stl game/quake_pak
pcap.stl network/pcap packet bodies raw (imports ethernet_frame:; linktype legend trimmed to common values
pcf.stl font/pcf_font table of contents; a table body opens by jump with its format and count
pcx.stl image/pcx
pff2.stl font/grub2_font section type chosen by peeking @d against "quoted" literals
pif.stl image/pif bits per pixel checked with check
ppi.stl network/packet_ppi radio fields; the frame body via F3
protobuf.stl serialization/google_protobuf + common/vlq_base128_le one message level; vl is the LEB128 key
pyc27.stl executable/python_pyc_27 partial; header and the outer code object; the marshal tree is recursive
qcom_bootldr.stl archive/android_bootldr_qcom body positions shown with =x from a running #set
rar.stl archive/rar RAR 1.5-4.x blocks, v5 detected only
regf.stl windows/regf header and the first hbin's cells (nk, vk, lf/lh, li/ri, sk)
respack.stl archive/respack
rpm.stl archive/rpm lead, signature and header index tables; header data values by offset need
rsrc.stl macos/resource_fork header, map, type list and reference lists (the per-type reference list offsets are not followed one by one)
rtcp.stl network/rtcp_payload SR, RR, SDES, BYE, feedback headers; REMB and transport feedback bodies skipped
rtp.stl network/rtp_packet payload type as a bit legend on the marker byte; padding length at the end needs
rtpdump.stl network/rtpdump header line with sc.2f and sc.0a, RTP header inlined
rwstream.stl game/renderware_binary_stream chunk walk, containers entered; struct bodies not typed (they depend on the parent chunk code: +
shell_items.stl windows/windows_shell_items root, volume and file entry bodies; the rest skipped by length
shx.stl geospatial/shapefile_index mixed endian header
snd.stl macos/mac_os_resource_snd sound header by jump from a buffer command; legends cannot hold negative values
some_ip.stl network/some_ip/* (5 files) one structure: header, SD entries and options (importsswitch-on
sparse.stl archive/android_sparse chunk length checked with check
specpr.stl scientific/spectroscopy/specpr record type from the t32 flag word
ssh_pubkey.stl security/ssh_public_key key type chosen by comparing the name bytes in the expression
stl3d.stl media/stl
sudoers_ts.stl log/sudoers_ts timespec with tu64i32
swf.stl executable/swf body via raw or inflate; lzma not decoded
systemtime.stl windows/windows_systemtime
tga.stl image/tga color map skipped as one block (entry size from a field
tim.stl image/psx_tim CLUT and image blocks through one hidden structure (no caption on the row
tls_hello.stl network/tls_client_hello SNI and ALPN decoded, other extensions skipped
trdos.stl filesystem/tr_dos_image
trx.stl firmware/broadcom_trx partition sizes shown with =; tail at $size - 64
tsm.stl database/tsm index found through the last 8 bytes
ttf.stl font/ttf table directory with typed jumps to head, hhea, maxp, OS/2, name; other tables raw
uefi_te.stl executable/uefi_te
utmp.stl log/glibc_utmp x86-64 layout, 384 byte records
vdi.stl filesystem/vdi header version 1.x
vmdk.stl filesystem/vmware_vmdk
voc.stl media/creative_voice_file sample rate shown with =
vox.stl media/magicavoxel_vox flat chunk walk (children not nested)
vpp.stl game/saints_row_2_vpp_pc names and extensions are in string blocks whose starts are shown with =x
wad.stl game/doom_wad directory listed; THINGS, LINEDEFS, SIDEDEFS, VERTEXES, SECTORS are separate structures applied with F3 (typing a lump by its name from the directory needs the entry's labels in the jump target: +
websocket.stl network/websocket loop ends on the FIN bit through a #set variable
winres.stl windows/windows_resource_file UTF-16 string ids listed char by char (a NUL-terminated s16 is still missing:; a remark must not contain "word:" at its start
wmf.stl image/wmf
xar.stl archive/xar TOC via call('inflate')
xm.stl media/tracker_modules/fasttracker_xm_module sample data skipped by the summed lengths
xwd.stl image/xwd
zchunk.stl archive/zchunk lead, preface, index and chunk table
zisofs.stl archive/zisofs block count from #set
zx_tap.stl filesystem/zx_spectrum_tap

Shipped before the port, not in the gallery table: zip, exe (PE), elf, dbf, mbr, fat_boot, uimage, dtb, png, bmp, wav, sqlite.

Clone this wiki locally