A bigobj symbol record is two bytes longer than a COFF one, to hold a 32-bit section number. The symbols otherwise mean the same as in classic COFF.
IMAGE_SYMBOL_EX
0Name, or 4 zero bytes and a string table offset8 bytes8Value4 bytes12SectionNumber, signed4 bytes16Type2 bytes18StorageClass1 byte19NumberOfAuxSymbols1 byte
SectionNumber is 0 for an external symbol, −1 for an absolute one, −2 for a debugging one, and otherwise a section counted from 1. StorageClass holds the same values as in COFF: 2 EXTERNAL, 3 STATIC, 6 LABEL, 101 FUNCTION, 103 FILE, 105 WEAK_EXTERNAL, 107 CLR_TOKEN.
The string table starts right after the symbol table, at PointerToSymbolTable plus 20 times NumberOfSymbols, with a 4-byte size that counts itself.
Auxiliary records
Each is 20 bytes. A section definition has these fields, and the others keep their COFF layouts with 2 unused bytes at the end:
| Offset | Size | Field | Meaning |
|---|---|---|---|
| 0 | 4 | Length | The section’s size |
| 4 | 2 | NumberOfRelocations | The number of relocations |
| 6 | 2 | NumberOfLinenumbers | The number of line numbers |
| 8 | 4 | CheckSum | A checksum of the contents |
| 12 | 2 | Number | The low 16 bits of the associated section’s number |
| 14 | 1 | Selection | The COMDAT selection number, as in COFF |
| 15 | 1 | Reserved | |
| 16 | 2 | HighNumber | The high 16 bits of the associated section’s number |
| 18 | 2 | Unused |
A .file symbol’s auxiliary record holds 20 bytes of the file name instead of 18.