File Format

.varm files contain executable code for the varm VM.

Structure

┌─────────────────────────────────────┐
│ Header (32 bytes)                   │
├─────────────────────────────────────┤
│ Text Section (N × 4 bytes)          │
├─────────────────────────────────────┤
│ Data Section (M bytes)              │
└─────────────────────────────────────┘

Header (32 bytes)

Offset

Size

Field

0x00

4

Magic “VARM”

0x04

4

Text offset

0x08

4

Text size

0x0C

4

Data offset

0x10

4

Data size

0x14

4

Entry point

0x18

4

Version (1)

0x1C

4

Flags (0)

All values are little-endian.

Magic Number

Bytes 0-3: ASCII “VARM” (0x56 0x41 0x52 0x4D)

Text Section

Encoded instructions, 4 bytes each. Loaded at virtual address 0x20.

Data Section

Initialized data. Loaded at virtual address 0x10000.

Example Hex Dump

$ xxd program.varm
00000000: 5641 524d 2000 0000 1000 0000 0001 0000  VARM............
00000010: 0001 0000 1400 0000 0100 0000 0100 0000  ................
00000020: 0000 00a0 0370 0001 2100 0000 0000 0000  .....p...!......
00000030: 2a00 0000                                *...

Header at 0x00-0x1F, text at 0x20.