Skip to content

Executable Format

View as Markdown

Thru executable programs follow a specific binary format that includes a header, program bytecode, and trailer.

A Thru executable consists of three main components:

ComponentSizeDescription
Header8 bytesVersion and metadata
ProgramVariableExecutable bytecode
Trailer8 bytesZero terminator

The header is exactly 8 bytes long and contains version information.

OffsetSizeFieldDescription
01VersionProgram format version (0x01)
1-77ReservedReserved for future use

Currently, only version 0x01 is supported.

01 00 00 00 00 00 00 00
^^ Version (0x01)
^^^^^^^^^^^^^^^ Reserved (7 bytes, typically zero)

The program bytecode section contains the executable instructions:

  • Starts immediately after the 8-byte header
  • Variable length depending on the program size
  • Contains the actual program instructions
  • Minimum size is 0 bytes (empty programs are valid)

The trailer is exactly 8 bytes long and serves as a terminator.

OffsetSizeFieldDescription
-88TerminatorMust be zero (0x0000000000000000)

The last 8 bytes of the executable must be set to zero.

00 00 00 00 00 00 00 00
^^^^^^^^^^^^^^^^^^^^^^^ All bytes must be zero
  • Total minimum size: 16 bytes (8-byte header + 8-byte trailer)
  • Header size: Exactly 8 bytes
  • Trailer size: Exactly 8 bytes
  • Program size: Variable (minimum 0 bytes)

Here’s a minimal valid Thru executable:

01 00 00 00 00 00 00 00 // Header: version 0x01 + 7 reserved bytes
95 00 00 00 00 00 00 00 // Program: 8 bytes of instructions
00 00 00 00 00 00 00 00 // Trailer: 8 zero bytes

In this example:

  • Total size: 24 bytes
  • Header size: 8 bytes
  • Program size: 8 bytes
  • Trailer size: 8 bytes