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. |