Introduction
A .vmsn file is the snapshot state file of a VMware virtual
machine: VMware's article on the contents of a Fusion bundle says it "stores the running state of a virtual
machine at the time you take the snapshot". It is named <name>-Snapshot<##>.vmsn, and
the snapshot's RAM is in a .vmem file with the same name when the
snapshot included memory. The .vmsd names the file in its
snapshotX.filename key. The format is not published by VMware; this page follows Volatility's
VMware address space (after Nir Izraeli's vmsnparser) and its wiki page "VMware Snapshot File", both read in
full for this page. The .vmss file has the same layout.
Structure
All numbers are little-endian. The file starts with a header, then an array of group records; each group points to a run of tags.
0Header magic, a value, the group count12 bytes12Group table one 80-byte record for each groupcount × 80…Tags of each group, ending with a (0, 0) tagvaries
Header
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
0 | 4 | uint32 | Magic | 0xBED2BED0, 0xBAD1BAD1, 0xBED2BED2 or 0xBED3BED3; the low nibble is the storage format version (0 to 3). |
4 | 4 | uint32 | Unknown | Not named by Volatility; the meaning is not known. |
8 | 4 | uint32 | Group count | The number of group records. |
Group record (80 bytes)
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
0 | 64 | text | Name | The group name, UTF-8, null-padded. |
64 | 8 | uint64 | Tags offset | The file offset of the group's first tag. |
72 | 8 | uint64 | Unknown | Part of the 80 bytes; not named. |
Tag
| Part | Size | Description |
|---|---|---|
| Flags | 1 | Bits 0 to 5: the data length; 62 and 63 mean a long tag. Bits 6 and 7: the number of 32-bit indices (0 to 3). |
| Name length, name | 1, then that many | The tag name, UTF-8. |
| Indices | 4 each | Separate tags of the same name (a CPU number, a register number). |
| Data | data length | After the indices; 1, 2, 4 and 8 bytes are numbers. |
| Long tag | 2 × size, 2, padding, data | The size on disk and in memory (32-bit in version 0, 64-bit later), a 16-bit padding length, the padding, then the data. |
| End | 2 | A tag with flags 0 and name length 0 ends the group. |
Not described
Unknown
- Reference: bytes 4 to 7 of the header, bytes 72 to 79 of each group record, and the meaning of every tag the sources do not print. VMware has not published the format.
- Viewer: such tags are shown by name, indices and raw value, labelled unknown; memory runs open as files, and an embedded configuration text or PNG opens in its own viewer.
Links
Software
- VMware Workstation Pro – VMware's desktop virtual machine software (Windows, Linux)
- VMware Fusion – VMware's virtual machine software for the Mac (macOS)
- Volatility 3 – memory forensics framework that reads .vmsn and .vmem files (Python)
Reference
- VMware Snapshot File – Volatility's description of the header, groups and tags
- Contents of the virtual machine bundle in Fusion – VMware's table of the files of a machine