5.4.4 Storage Class

The Storage Class field of the Symbol Table indicates what kind of definition a symbol represents. The following table shows possible values. Note that the Storage Class field is an unsigned one-byte integer. The special value -1 should therefore be taken to mean its unsigned equivalent, 0xFF.

Although traditional COFF format makes use of many storage-class values, Microsoft tools rely on CodeView format for most symbolic information and generally use only four storage-class values: EXTERNAL (2), STATIC (3), FUNCTION (101), and STATIC (103). Except in the second column heading below, "Value" should be taken to mean the Value field of the symbol record (whose interpretation depends on the number found as the storage class).

Constant Value Description / Interpretation of Value Field
IMAGE_SYM_CLASS_END_OF_FUNCTION -1 (0xFF) Special symbol representing end of function, for debugging purposes.
IMAGE_SYM_CLASS_NULL 0 No storage class assigned.
IMAGE_SYM_CLASS_AUTOMATIC 1 Automatic (stack) variable. The Value field specifies stack frame offset.
IMAGE_SYM_CLASS_EXTERNAL 2 Used by Microsoft tools for external symbols. The Value field indicates the size if the section number is IMAGE_SYM_UNDEFINED (0). If the section number is not 0, then the Value field specifies the offset within the section.
IMAGE_SYM_CLASS_STATIC 3 The Value field specifies the offset of the symbol within the section. If the Value is 0, then the symbol represents a section name.
IMAGE_SYM_CLASS_REGISTER 4 Register variable. The Value field specifies register number.
IMAGE_SYM_CLASS_EXTERNAL_DEF 5 Symbol is defined externally.
IMAGE_SYM_CLASS_LABEL 6 Code label defined within the module. The Value field specifies the offset of the symbol within the section.
IMAGE_SYM_CLASS_UNDEFINED_LABEL 7 Reference to a code label not defined.
IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8 Structure member. The Value field specifies nth member.
IMAGE_SYM_CLASS_ARGUMENT 9 Formal argument (parameter)of a function. The Value field specifies nth argument.
IMAGE_SYM_CLASS_STRUCT_TAG 10 Structure tag-name entry.
IMAGE_SYM_CLASS_MEMBER_OF_UNION 11 Union member. The Value field specifies nth member.
IMAGE_SYM_CLASS_UNION_TAG 12 Union tag-name entry.
IMAGE_SYM_CLASS_TYPE_DEFINITION 13 Typedef entry.
IMAGE_SYM_CLASS_UNDEFINED_STATIC 14 Static data declaration.
IMAGE_SYM_CLASS_ENUM_TAG 15 Enumerated type tagname entry.
IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16 Member of enumeration. Value specifies nth member.
IMAGE_SYM_CLASS_REGISTER_PARAM 17 Register parameter.
IMAGE_SYM_CLASS_BIT_FIELD 18 Bit-field reference. Value specifies nth bit in the bit field.
IMAGE_SYM_CLASS_BLOCK 100 A .bb (beginning of block) or .eb (end of block) record. Value is the relocatable address of the code location.
IMAGE_SYM_CLASS_FUNCTION 101 Used by Microsoft tools for symbol records that define the extent of a function: begin function (named .bf), end function (.ef), and lines in function (.lf). For .lf records, Value gives the number of source lines in the function. For .ef records, Value gives the size of function code.
IMAGE_SYM_CLASS_END_OF_STRUCT 102 End of structure entry.
IMAGE_SYM_CLASS_FILE 103 Used by Microsoft tools, as well as traditional COFF format, for the source-file symbol record. The symbol is followed by auxiliary records that name the file.
IMAGE_SYM_CLASS_SECTION 104 Definition of a section (Microsoft tools use STATIC storage class instead).
IMAGE_SYM_CLASS_WEAK_EXTERNAL 105 Weak external. Microsoft tools use EXTERNAL storage class instead. See Section 5.5.3, "Auxiliary Format 3: Weak Externals," for more information.