BAML format description

A BAML stream consists of a header and sequential records that contain the data.

The Header

The header is 28 bytes long. The first four bytes are a little endian integer containing the length of the preamble in bytes. The preamble is the UTF-16 string "MSBAML", followed by three integers with the value 0x60000.

Record format:

In general a record consists of a type byte and its content. Some records also have a field, following the type byte, containing the remaining length of the record, encoded as 7-bit encoded integer.

Record Types:

DocumentStart (= 0x01):

The document start (after the type byte) is 6 Bytes long. Usually 00 FF FF FF FF 00. These bytes can be safely ignored.

AssemblyInfo (= 0xC1):

The length field is followed by a 2 byte long ID. The ID is followed by a string containing the assembly name.

